active_model_serializers 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -4
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +39 -2
  5. data/Gemfile +1 -1
  6. data/README.md +21 -24
  7. data/Rakefile +3 -3
  8. data/active_model_serializers.gemspec +19 -23
  9. data/docs/general/adapters.md +4 -2
  10. data/docs/general/configuration_options.md +6 -1
  11. data/docs/general/deserialization.md +1 -1
  12. data/docs/general/fields.md +31 -0
  13. data/docs/general/rendering.md +7 -2
  14. data/docs/general/serializers.md +62 -3
  15. data/docs/howto/add_pagination_links.md +2 -3
  16. data/docs/integrations/ember-and-json-api.md +25 -10
  17. data/docs/jsonapi/schema.md +1 -1
  18. data/lib/action_controller/serialization.rb +4 -3
  19. data/lib/active_model/serializer/adapter/base.rb +2 -0
  20. data/lib/active_model/serializer/array_serializer.rb +8 -5
  21. data/lib/active_model/serializer/associations.rb +6 -7
  22. data/lib/active_model/serializer/belongs_to_reflection.rb +0 -3
  23. data/lib/active_model/serializer/caching.rb +67 -112
  24. data/lib/active_model/serializer/collection_serializer.rb +30 -10
  25. data/lib/active_model/serializer/configuration.rb +1 -0
  26. data/lib/active_model/serializer/error_serializer.rb +11 -7
  27. data/lib/active_model/serializer/errors_serializer.rb +25 -20
  28. data/lib/active_model/serializer/has_many_reflection.rb +0 -3
  29. data/lib/active_model/serializer/has_one_reflection.rb +0 -3
  30. data/lib/active_model/serializer/lint.rb +134 -130
  31. data/lib/active_model/serializer/reflection.rb +3 -3
  32. data/lib/active_model/serializer/version.rb +1 -1
  33. data/lib/active_model/serializer.rb +57 -15
  34. data/lib/active_model_serializers/adapter/attributes.rb +2 -67
  35. data/lib/active_model_serializers/adapter/base.rb +38 -38
  36. data/lib/active_model_serializers/adapter/json_api/link.rb +1 -1
  37. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +8 -1
  38. data/lib/active_model_serializers/adapter/json_api.rb +36 -28
  39. data/lib/active_model_serializers/adapter.rb +6 -0
  40. data/lib/active_model_serializers/deprecate.rb +1 -2
  41. data/lib/active_model_serializers/deserialization.rb +2 -0
  42. data/lib/active_model_serializers/model.rb +3 -1
  43. data/lib/active_model_serializers/railtie.rb +3 -1
  44. data/lib/active_model_serializers/register_jsonapi_renderer.rb +44 -31
  45. data/lib/active_model_serializers/serialization_context.rb +10 -3
  46. data/lib/active_model_serializers.rb +6 -0
  47. data/lib/generators/rails/serializer_generator.rb +3 -3
  48. data/lib/grape/active_model_serializers.rb +7 -5
  49. data/lib/grape/formatters/active_model_serializers.rb +19 -2
  50. data/lib/grape/helpers/active_model_serializers.rb +1 -0
  51. data/test/action_controller/adapter_selector_test.rb +4 -4
  52. data/test/action_controller/explicit_serializer_test.rb +5 -4
  53. data/test/action_controller/json/include_test.rb +106 -27
  54. data/test/action_controller/json_api/errors_test.rb +6 -7
  55. data/test/action_controller/json_api/linked_test.rb +29 -24
  56. data/test/action_controller/json_api/pagination_test.rb +19 -19
  57. data/test/action_controller/serialization_test.rb +10 -7
  58. data/test/active_model_serializers/json_pointer_test.rb +15 -13
  59. data/test/active_model_serializers/key_transform_test.rb +254 -252
  60. data/test/active_model_serializers/model_test.rb +6 -4
  61. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +143 -0
  62. data/test/active_model_serializers/serialization_context_test_isolated.rb +23 -10
  63. data/test/adapter/json/collection_test.rb +14 -0
  64. data/test/adapter/json/transform_test.rb +14 -14
  65. data/test/adapter/json_api/collection_test.rb +4 -3
  66. data/test/adapter/json_api/errors_test.rb +17 -19
  67. data/test/adapter/json_api/has_many_test.rb +18 -18
  68. data/test/adapter/json_api/json_api_test.rb +5 -7
  69. data/test/adapter/json_api/linked_test.rb +9 -6
  70. data/test/adapter/json_api/links_test.rb +3 -1
  71. data/test/adapter/json_api/pagination_links_test.rb +19 -7
  72. data/test/adapter/json_api/relationships_test.rb +9 -4
  73. data/test/adapter/json_api/resource_identifier_test.rb +7 -2
  74. data/test/adapter/json_api/resource_meta_test.rb +3 -3
  75. data/test/adapter/json_api/transform_test.rb +251 -250
  76. data/test/adapter/json_api/type_test.rb +1 -1
  77. data/test/adapter/json_test.rb +8 -7
  78. data/test/adapter/null_test.rb +1 -2
  79. data/test/adapter/polymorphic_test.rb +5 -5
  80. data/test/adapter_test.rb +1 -1
  81. data/test/benchmark/app.rb +1 -1
  82. data/test/benchmark/bm_caching.rb +15 -15
  83. data/test/benchmark/bm_transform.rb +16 -5
  84. data/test/benchmark/controllers.rb +16 -17
  85. data/test/benchmark/fixtures.rb +72 -72
  86. data/test/cache_test.rb +101 -45
  87. data/test/collection_serializer_test.rb +2 -2
  88. data/test/fixtures/poro.rb +8 -7
  89. data/test/grape_test.rb +152 -56
  90. data/test/lint_test.rb +1 -1
  91. data/test/logger_test.rb +13 -11
  92. data/test/serializable_resource_test.rb +18 -22
  93. data/test/serializers/associations_test.rb +10 -10
  94. data/test/serializers/attribute_test.rb +1 -1
  95. data/test/serializers/attributes_test.rb +1 -1
  96. data/test/serializers/fieldset_test.rb +1 -1
  97. data/test/serializers/meta_test.rb +12 -6
  98. data/test/serializers/root_test.rb +1 -1
  99. data/test/serializers/serializer_for_test.rb +3 -1
  100. data/test/support/isolated_unit.rb +5 -2
  101. data/test/support/rails5_shims.rb +8 -2
  102. data/test/support/rails_app.rb +0 -9
  103. data/test/support/serialization_testing.rb +7 -5
  104. metadata +54 -24
  105. data/.rubocop_todo.yml +0 -167
  106. data/lib/active_model/serializer/include_tree.rb +0 -111
  107. data/test/include_tree/from_include_args_test.rb +0 -26
  108. data/test/include_tree/from_string_test.rb +0 -94
  109. data/test/include_tree/include_args_to_hash_test.rb +0 -64
@@ -1,263 +1,265 @@
1
1
  require 'test_helper'
2
2
 
3
- class ActiveModelSerializers::KeyTransformTest < ActiveSupport::TestCase
4
- def test_camel
5
- obj = Object.new
6
- scenarios = [
7
- {
8
- value: { :"some-key" => 'value' },
9
- expected: { :SomeKey => 'value' }
10
- },
11
- {
12
- value: { :someKey => 'value' },
13
- expected: { :SomeKey => 'value' }
14
- },
15
- {
16
- value: { :some_key => 'value' },
17
- expected: { :SomeKey => 'value' }
18
- },
19
- {
20
- value: { 'some-key' => 'value' },
21
- expected: { 'SomeKey' => 'value' }
22
- },
23
- {
24
- value: { 'someKey' => 'value' },
25
- expected: { 'SomeKey' => 'value' }
26
- },
27
- {
28
- value: { 'some_key' => 'value' },
29
- expected: { 'SomeKey' => 'value' }
30
- },
31
- {
32
- value: :"some-value",
33
- expected: :SomeValue
34
- },
35
- {
36
- value: :some_value,
37
- expected: :SomeValue
38
- },
39
- {
40
- value: :someValue,
41
- expected: :SomeValue
42
- },
43
- {
44
- value: 'some-value',
45
- expected: 'SomeValue'
46
- },
47
- {
48
- value: 'someValue',
49
- expected: 'SomeValue'
50
- },
51
- {
52
- value: 'some_value',
53
- expected: 'SomeValue'
54
- },
55
- {
56
- value: obj,
57
- expected: obj
58
- },
59
- {
60
- value: nil,
61
- expected: nil
62
- }
63
- ]
64
- scenarios.each do |s|
65
- result = ActiveModelSerializers::KeyTransform.camel(s[:value])
66
- assert_equal s[:expected], result
3
+ module ActiveModelSerializers
4
+ class KeyTransformTest < ActiveSupport::TestCase
5
+ def test_camel
6
+ obj = Object.new
7
+ scenarios = [
8
+ {
9
+ value: { :"some-key" => 'value' },
10
+ expected: { SomeKey: 'value' }
11
+ },
12
+ {
13
+ value: { someKey: 'value' },
14
+ expected: { SomeKey: 'value' }
15
+ },
16
+ {
17
+ value: { some_key: 'value' },
18
+ expected: { SomeKey: 'value' }
19
+ },
20
+ {
21
+ value: { 'some-key' => 'value' },
22
+ expected: { 'SomeKey' => 'value' }
23
+ },
24
+ {
25
+ value: { 'someKey' => 'value' },
26
+ expected: { 'SomeKey' => 'value' }
27
+ },
28
+ {
29
+ value: { 'some_key' => 'value' },
30
+ expected: { 'SomeKey' => 'value' }
31
+ },
32
+ {
33
+ value: :"some-value",
34
+ expected: :SomeValue
35
+ },
36
+ {
37
+ value: :some_value,
38
+ expected: :SomeValue
39
+ },
40
+ {
41
+ value: :someValue,
42
+ expected: :SomeValue
43
+ },
44
+ {
45
+ value: 'some-value',
46
+ expected: 'SomeValue'
47
+ },
48
+ {
49
+ value: 'someValue',
50
+ expected: 'SomeValue'
51
+ },
52
+ {
53
+ value: 'some_value',
54
+ expected: 'SomeValue'
55
+ },
56
+ {
57
+ value: obj,
58
+ expected: obj
59
+ },
60
+ {
61
+ value: nil,
62
+ expected: nil
63
+ }
64
+ ]
65
+ scenarios.each do |s|
66
+ result = ActiveModelSerializers::KeyTransform.camel(s[:value])
67
+ assert_equal s[:expected], result
68
+ end
67
69
  end
68
- end
69
70
 
70
- def test_camel_lower
71
- obj = Object.new
72
- scenarios = [
73
- {
74
- value: { :"some-key" => 'value' },
75
- expected: { :someKey => 'value' }
76
- },
77
- {
78
- value: { :SomeKey => 'value' },
79
- expected: { :someKey => 'value' }
80
- },
81
- {
82
- value: { :some_key => 'value' },
83
- expected: { :someKey => 'value' }
84
- },
85
- {
86
- value: { 'some-key' => 'value' },
87
- expected: { 'someKey' => 'value' }
88
- },
89
- {
90
- value: { 'SomeKey' => 'value' },
91
- expected: { 'someKey' => 'value' }
92
- },
93
- {
94
- value: { 'some_key' => 'value' },
95
- expected: { 'someKey' => 'value' }
96
- },
97
- {
98
- value: :"some-value",
99
- expected: :someValue
100
- },
101
- {
102
- value: :SomeValue,
103
- expected: :someValue
104
- },
105
- {
106
- value: :some_value,
107
- expected: :someValue
108
- },
109
- {
110
- value: 'some-value',
111
- expected: 'someValue'
112
- },
113
- {
114
- value: 'SomeValue',
115
- expected: 'someValue'
116
- },
117
- {
118
- value: 'some_value',
119
- expected: 'someValue'
120
- },
121
- {
122
- value: obj,
123
- expected: obj
124
- },
125
- {
126
- value: nil,
127
- expected: nil
128
- }
129
- ]
130
- scenarios.each do |s|
131
- result = ActiveModelSerializers::KeyTransform.camel_lower(s[:value])
132
- assert_equal s[:expected], result
71
+ def test_camel_lower
72
+ obj = Object.new
73
+ scenarios = [
74
+ {
75
+ value: { :"some-key" => 'value' },
76
+ expected: { someKey: 'value' }
77
+ },
78
+ {
79
+ value: { SomeKey: 'value' },
80
+ expected: { someKey: 'value' }
81
+ },
82
+ {
83
+ value: { some_key: 'value' },
84
+ expected: { someKey: 'value' }
85
+ },
86
+ {
87
+ value: { 'some-key' => 'value' },
88
+ expected: { 'someKey' => 'value' }
89
+ },
90
+ {
91
+ value: { 'SomeKey' => 'value' },
92
+ expected: { 'someKey' => 'value' }
93
+ },
94
+ {
95
+ value: { 'some_key' => 'value' },
96
+ expected: { 'someKey' => 'value' }
97
+ },
98
+ {
99
+ value: :"some-value",
100
+ expected: :someValue
101
+ },
102
+ {
103
+ value: :SomeValue,
104
+ expected: :someValue
105
+ },
106
+ {
107
+ value: :some_value,
108
+ expected: :someValue
109
+ },
110
+ {
111
+ value: 'some-value',
112
+ expected: 'someValue'
113
+ },
114
+ {
115
+ value: 'SomeValue',
116
+ expected: 'someValue'
117
+ },
118
+ {
119
+ value: 'some_value',
120
+ expected: 'someValue'
121
+ },
122
+ {
123
+ value: obj,
124
+ expected: obj
125
+ },
126
+ {
127
+ value: nil,
128
+ expected: nil
129
+ }
130
+ ]
131
+ scenarios.each do |s|
132
+ result = ActiveModelSerializers::KeyTransform.camel_lower(s[:value])
133
+ assert_equal s[:expected], result
134
+ end
133
135
  end
134
- end
135
136
 
136
- def test_dash
137
- obj = Object.new
138
- scenarios = [
139
- {
140
- value: { :some_key => 'value' },
141
- expected: { :"some-key" => 'value' }
142
- },
143
- {
144
- value: { 'some_key' => 'value' },
145
- expected: { 'some-key' => 'value' }
146
- },
147
- {
148
- value: { :SomeKey => 'value' },
149
- expected: { :"some-key" => 'value' }
150
- },
151
- {
152
- value: { 'SomeKey' => 'value' },
153
- expected: { 'some-key' => 'value' }
154
- },
155
- {
156
- value: { :someKey => 'value' },
157
- expected: { :"some-key" => 'value' }
158
- },
159
- {
160
- value: { 'someKey' => 'value' },
161
- expected: { 'some-key' => 'value' }
162
- },
163
- {
164
- value: :some_value,
165
- expected: :"some-value"
166
- },
167
- {
168
- value: :SomeValue,
169
- expected: :"some-value"
170
- },
171
- {
172
- value: 'SomeValue',
173
- expected: 'some-value'
174
- },
175
- {
176
- value: :someValue,
177
- expected: :"some-value"
178
- },
179
- {
180
- value: 'someValue',
181
- expected: 'some-value'
182
- },
183
- {
184
- value: obj,
185
- expected: obj
186
- },
187
- {
188
- value: nil,
189
- expected: nil
190
- }
191
- ]
192
- scenarios.each do |s|
193
- result = ActiveModelSerializers::KeyTransform.dash(s[:value])
194
- assert_equal s[:expected], result
137
+ def test_dash
138
+ obj = Object.new
139
+ scenarios = [
140
+ {
141
+ value: { some_key: 'value' },
142
+ expected: { :"some-key" => 'value' }
143
+ },
144
+ {
145
+ value: { 'some_key' => 'value' },
146
+ expected: { 'some-key' => 'value' }
147
+ },
148
+ {
149
+ value: { SomeKey: 'value' },
150
+ expected: { :"some-key" => 'value' }
151
+ },
152
+ {
153
+ value: { 'SomeKey' => 'value' },
154
+ expected: { 'some-key' => 'value' }
155
+ },
156
+ {
157
+ value: { someKey: 'value' },
158
+ expected: { :"some-key" => 'value' }
159
+ },
160
+ {
161
+ value: { 'someKey' => 'value' },
162
+ expected: { 'some-key' => 'value' }
163
+ },
164
+ {
165
+ value: :some_value,
166
+ expected: :"some-value"
167
+ },
168
+ {
169
+ value: :SomeValue,
170
+ expected: :"some-value"
171
+ },
172
+ {
173
+ value: 'SomeValue',
174
+ expected: 'some-value'
175
+ },
176
+ {
177
+ value: :someValue,
178
+ expected: :"some-value"
179
+ },
180
+ {
181
+ value: 'someValue',
182
+ expected: 'some-value'
183
+ },
184
+ {
185
+ value: obj,
186
+ expected: obj
187
+ },
188
+ {
189
+ value: nil,
190
+ expected: nil
191
+ }
192
+ ]
193
+ scenarios.each do |s|
194
+ result = ActiveModelSerializers::KeyTransform.dash(s[:value])
195
+ assert_equal s[:expected], result
196
+ end
195
197
  end
196
- end
197
198
 
198
- def test_underscore
199
- obj = Object.new
200
- scenarios = [
201
- {
202
- value: { :"some-key" => 'value' },
203
- expected: { :some_key => 'value' }
204
- },
205
- {
206
- value: { 'some-key' => 'value' },
207
- expected: { 'some_key' => 'value' }
208
- },
209
- {
210
- value: { :SomeKey => 'value' },
211
- expected: { :some_key => 'value' }
212
- },
213
- {
214
- value: { 'SomeKey' => 'value' },
215
- expected: { 'some_key' => 'value' }
216
- },
217
- {
218
- value: { :someKey => 'value' },
219
- expected: { :some_key => 'value' }
220
- },
221
- {
222
- value: { 'someKey' => 'value' },
223
- expected: { 'some_key' => 'value' }
224
- },
225
- {
226
- value: :"some-value",
227
- expected: :some_value
228
- },
229
- {
230
- value: :SomeValue,
231
- expected: :some_value
232
- },
233
- {
234
- value: :someValue,
235
- expected: :some_value
236
- },
237
- {
238
- value: 'some-value',
239
- expected: 'some_value'
240
- },
241
- {
242
- value: 'SomeValue',
243
- expected: 'some_value'
244
- },
245
- {
246
- value: 'someValue',
247
- expected: 'some_value'
248
- },
249
- {
250
- value: obj,
251
- expected: obj
252
- },
253
- {
254
- value: nil,
255
- expected: nil
256
- }
257
- ]
258
- scenarios.each do |s|
259
- result = ActiveModelSerializers::KeyTransform.underscore(s[:value])
260
- assert_equal s[:expected], result
199
+ def test_underscore
200
+ obj = Object.new
201
+ scenarios = [
202
+ {
203
+ value: { :"some-key" => 'value' },
204
+ expected: { some_key: 'value' }
205
+ },
206
+ {
207
+ value: { 'some-key' => 'value' },
208
+ expected: { 'some_key' => 'value' }
209
+ },
210
+ {
211
+ value: { SomeKey: 'value' },
212
+ expected: { some_key: 'value' }
213
+ },
214
+ {
215
+ value: { 'SomeKey' => 'value' },
216
+ expected: { 'some_key' => 'value' }
217
+ },
218
+ {
219
+ value: { someKey: 'value' },
220
+ expected: { some_key: 'value' }
221
+ },
222
+ {
223
+ value: { 'someKey' => 'value' },
224
+ expected: { 'some_key' => 'value' }
225
+ },
226
+ {
227
+ value: :"some-value",
228
+ expected: :some_value
229
+ },
230
+ {
231
+ value: :SomeValue,
232
+ expected: :some_value
233
+ },
234
+ {
235
+ value: :someValue,
236
+ expected: :some_value
237
+ },
238
+ {
239
+ value: 'some-value',
240
+ expected: 'some_value'
241
+ },
242
+ {
243
+ value: 'SomeValue',
244
+ expected: 'some_value'
245
+ },
246
+ {
247
+ value: 'someValue',
248
+ expected: 'some_value'
249
+ },
250
+ {
251
+ value: obj,
252
+ expected: obj
253
+ },
254
+ {
255
+ value: nil,
256
+ expected: nil
257
+ }
258
+ ]
259
+ scenarios.each do |s|
260
+ result = ActiveModelSerializers::KeyTransform.underscore(s[:value])
261
+ assert_equal s[:expected], result
262
+ end
261
263
  end
262
264
  end
263
265
  end
@@ -1,9 +1,11 @@
1
1
  require 'test_helper'
2
2
 
3
- class ActiveModelSerializers::ModelTest < ActiveSupport::TestCase
4
- include ActiveModel::Serializer::Lint::Tests
3
+ module ActiveModelSerializers
4
+ class ModelTest < ActiveSupport::TestCase
5
+ include ActiveModel::Serializer::Lint::Tests
5
6
 
6
- def setup
7
- @resource = ActiveModelSerializers::Model.new
7
+ def setup
8
+ @resource = ActiveModelSerializers::Model.new
9
+ end
8
10
  end
9
11
  end
@@ -0,0 +1,143 @@
1
+ require 'support/isolated_unit'
2
+ require 'minitest/mock'
3
+ require 'action_dispatch'
4
+ require 'action_controller'
5
+
6
+ class JsonApiRendererTest < ActionDispatch::IntegrationTest
7
+ include ActiveSupport::Testing::Isolation
8
+
9
+ class TestController < ActionController::Base
10
+ class << self
11
+ attr_accessor :last_request_parameters
12
+ end
13
+
14
+ def render_with_jsonapi_renderer
15
+ author = Author.new(params[:data][:attributes])
16
+ render jsonapi: author
17
+ end
18
+
19
+ def parse
20
+ self.class.last_request_parameters = request.request_parameters
21
+ head :ok
22
+ end
23
+ end
24
+
25
+ def teardown
26
+ TestController.last_request_parameters = nil
27
+ end
28
+
29
+ def assert_parses(expected, actual, headers = {})
30
+ post '/parse', params: actual, headers: headers
31
+ assert_response :ok
32
+ assert_equal(expected, TestController.last_request_parameters)
33
+ end
34
+
35
+ class WithoutRenderer < JsonApiRendererTest
36
+ setup do
37
+ require 'rails'
38
+ require 'active_record'
39
+ require 'support/rails5_shims'
40
+ require 'active_model_serializers'
41
+ require 'fixtures/poro'
42
+
43
+ make_basic_app
44
+
45
+ Rails.application.routes.draw do
46
+ ActiveSupport::Deprecation.silence do
47
+ match ':action', to: TestController, via: [:get, :post]
48
+ end
49
+ end
50
+ end
51
+
52
+ def test_jsonapi_parser_not_registered
53
+ parsers = if Rails::VERSION::MAJOR >= 5
54
+ ActionDispatch::Request.parameter_parsers
55
+ else
56
+ ActionDispatch::ParamsParser::DEFAULT_PARSERS
57
+ end
58
+ assert_nil parsers[Mime[:jsonapi]]
59
+ end
60
+
61
+ def test_jsonapi_renderer_not_registered
62
+ expected = {
63
+ 'data' => {
64
+ 'attributes' => {
65
+ 'name' => 'Johnny Rico'
66
+ },
67
+ 'type' => 'users'
68
+ }
69
+ }
70
+ payload = '{"data": {"attributes": {"name": "Johnny Rico"}, "type": "authors"}}'
71
+ headers = { 'CONTENT_TYPE' => 'application/vnd.api+json' }
72
+ post '/render_with_jsonapi_renderer', params: payload, headers: headers
73
+ assert expected, response.body
74
+ end
75
+
76
+ def test_jsonapi_parser
77
+ assert_parses(
78
+ {},
79
+ '',
80
+ 'CONTENT_TYPE' => 'application/vnd.api+json'
81
+ )
82
+ end
83
+ end
84
+
85
+ class WithRenderer < JsonApiRendererTest
86
+ setup do
87
+ require 'rails'
88
+ require 'active_record'
89
+ require 'support/rails5_shims'
90
+ require 'active_model_serializers'
91
+ require 'fixtures/poro'
92
+ require 'active_model_serializers/register_jsonapi_renderer'
93
+
94
+ make_basic_app
95
+
96
+ Rails.application.routes.draw do
97
+ ActiveSupport::Deprecation.silence do
98
+ match ':action', to: TestController, via: [:get, :post]
99
+ end
100
+ end
101
+ end
102
+
103
+ def test_jsonapi_parser_registered
104
+ if Rails::VERSION::MAJOR >= 5
105
+ parsers = ActionDispatch::Request.parameter_parsers
106
+ assert_equal Proc, parsers[:jsonapi].class
107
+ else
108
+ parsers = ActionDispatch::ParamsParser::DEFAULT_PARSERS
109
+ assert_equal Proc, parsers[Mime[:jsonapi]].class
110
+ end
111
+ end
112
+
113
+ def test_jsonapi_renderer_registered
114
+ expected = {
115
+ 'data' => {
116
+ 'attributes' => {
117
+ 'name' => 'Johnny Rico'
118
+ },
119
+ 'type' => 'users'
120
+ }
121
+ }
122
+ payload = '{"data": {"attributes": {"name": "Johnny Rico"}, "type": "authors"}}'
123
+ headers = { 'CONTENT_TYPE' => 'application/vnd.api+json' }
124
+ post '/render_with_jsonapi_renderer', params: payload, headers: headers
125
+ assert expected, response.body
126
+ end
127
+
128
+ def test_jsonapi_parser
129
+ assert_parses(
130
+ {
131
+ 'data' => {
132
+ 'attributes' => {
133
+ 'name' => 'John Doe'
134
+ },
135
+ 'type' => 'users'
136
+ }
137
+ },
138
+ '{"data": {"attributes": {"name": "John Doe"}, "type": "users"}}',
139
+ 'CONTENT_TYPE' => 'application/vnd.api+json'
140
+ )
141
+ end
142
+ end
143
+ end