-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathdeserialization_test.rb
112 lines (101 loc) · 3.31 KB
/
deserialization_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
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' => {
'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