active_model_serializers 0.10.9 → 0.10.13

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 (161) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -2
  3. data/README.md +18 -19
  4. data/lib/action_controller/serialization.rb +9 -1
  5. data/lib/active_model/serializer/collection_serializer.rb +11 -2
  6. data/lib/active_model/serializer/concerns/caching.rb +2 -1
  7. data/lib/active_model/serializer/fieldset.rb +1 -1
  8. data/lib/active_model/serializer/reflection.rb +4 -4
  9. data/lib/active_model/serializer/version.rb +1 -1
  10. data/lib/active_model/serializer.rb +13 -4
  11. data/lib/active_model_serializers/adapter/attributes.rb +21 -0
  12. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +5 -1
  13. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +1 -1
  14. data/lib/active_model_serializers/model/caching.rb +26 -0
  15. metadata +20 -292
  16. data/.github/ISSUE_TEMPLATE.md +0 -29
  17. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  18. data/.gitignore +0 -35
  19. data/.rubocop.yml +0 -109
  20. data/.simplecov +0 -110
  21. data/.travis.yml +0 -63
  22. data/CODE_OF_CONDUCT.md +0 -74
  23. data/CONTRIBUTING.md +0 -105
  24. data/Gemfile +0 -74
  25. data/Rakefile +0 -76
  26. data/active_model_serializers.gemspec +0 -64
  27. data/appveyor.yml +0 -28
  28. data/bin/bench +0 -171
  29. data/bin/bench_regression +0 -316
  30. data/bin/rubocop +0 -38
  31. data/bin/serve_benchmark +0 -39
  32. data/docs/README.md +0 -41
  33. data/docs/STYLE.md +0 -58
  34. data/docs/general/adapters.md +0 -269
  35. data/docs/general/caching.md +0 -58
  36. data/docs/general/configuration_options.md +0 -185
  37. data/docs/general/deserialization.md +0 -100
  38. data/docs/general/fields.md +0 -31
  39. data/docs/general/getting_started.md +0 -133
  40. data/docs/general/instrumentation.md +0 -40
  41. data/docs/general/key_transforms.md +0 -40
  42. data/docs/general/logging.md +0 -21
  43. data/docs/general/rendering.md +0 -293
  44. data/docs/general/serializers.md +0 -495
  45. data/docs/how-open-source-maintained.jpg +0 -0
  46. data/docs/howto/add_pagination_links.md +0 -138
  47. data/docs/howto/add_relationship_links.md +0 -140
  48. data/docs/howto/add_root_key.md +0 -62
  49. data/docs/howto/grape_integration.md +0 -42
  50. data/docs/howto/outside_controller_use.md +0 -66
  51. data/docs/howto/passing_arbitrary_options.md +0 -27
  52. data/docs/howto/serialize_poro.md +0 -73
  53. data/docs/howto/test.md +0 -154
  54. data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
  55. data/docs/integrations/ember-and-json-api.md +0 -147
  56. data/docs/integrations/grape.md +0 -19
  57. data/docs/jsonapi/errors.md +0 -56
  58. data/docs/jsonapi/schema/schema.json +0 -366
  59. data/docs/jsonapi/schema.md +0 -151
  60. data/docs/rfcs/0000-namespace.md +0 -106
  61. data/docs/rfcs/template.md +0 -15
  62. data/test/action_controller/adapter_selector_test.rb +0 -64
  63. data/test/action_controller/explicit_serializer_test.rb +0 -137
  64. data/test/action_controller/json/include_test.rb +0 -248
  65. data/test/action_controller/json_api/deserialization_test.rb +0 -114
  66. data/test/action_controller/json_api/errors_test.rb +0 -42
  67. data/test/action_controller/json_api/fields_test.rb +0 -68
  68. data/test/action_controller/json_api/linked_test.rb +0 -204
  69. data/test/action_controller/json_api/pagination_test.rb +0 -126
  70. data/test/action_controller/json_api/transform_test.rb +0 -191
  71. data/test/action_controller/lookup_proc_test.rb +0 -51
  72. data/test/action_controller/namespace_lookup_test.rb +0 -234
  73. data/test/action_controller/serialization_scope_name_test.rb +0 -237
  74. data/test/action_controller/serialization_test.rb +0 -480
  75. data/test/active_model_serializers/adapter_for_test.rb +0 -210
  76. data/test/active_model_serializers/json_pointer_test.rb +0 -24
  77. data/test/active_model_serializers/logging_test.rb +0 -79
  78. data/test/active_model_serializers/model_test.rb +0 -144
  79. data/test/active_model_serializers/railtie_test_isolated.rb +0 -70
  80. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -163
  81. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -73
  82. data/test/active_model_serializers/test/schema_test.rb +0 -133
  83. data/test/active_model_serializers/test/serializer_test.rb +0 -64
  84. data/test/active_record_test.rb +0 -11
  85. data/test/adapter/attributes_test.rb +0 -42
  86. data/test/adapter/deprecation_test.rb +0 -102
  87. data/test/adapter/json/belongs_to_test.rb +0 -47
  88. data/test/adapter/json/collection_test.rb +0 -106
  89. data/test/adapter/json/has_many_test.rb +0 -55
  90. data/test/adapter/json/transform_test.rb +0 -95
  91. data/test/adapter/json_api/belongs_to_test.rb +0 -157
  92. data/test/adapter/json_api/collection_test.rb +0 -98
  93. data/test/adapter/json_api/errors_test.rb +0 -78
  94. data/test/adapter/json_api/fields_test.rb +0 -98
  95. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -98
  96. data/test/adapter/json_api/has_many_test.rb +0 -175
  97. data/test/adapter/json_api/has_one_test.rb +0 -82
  98. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -215
  99. data/test/adapter/json_api/json_api_test.rb +0 -35
  100. data/test/adapter/json_api/linked_test.rb +0 -415
  101. data/test/adapter/json_api/links_test.rb +0 -112
  102. data/test/adapter/json_api/pagination_links_test.rb +0 -208
  103. data/test/adapter/json_api/parse_test.rb +0 -139
  104. data/test/adapter/json_api/relationship_test.rb +0 -399
  105. data/test/adapter/json_api/resource_meta_test.rb +0 -102
  106. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -84
  107. data/test/adapter/json_api/transform_test.rb +0 -514
  108. data/test/adapter/json_api/type_test.rb +0 -195
  109. data/test/adapter/json_test.rb +0 -48
  110. data/test/adapter/null_test.rb +0 -24
  111. data/test/adapter/polymorphic_test.rb +0 -220
  112. data/test/adapter_test.rb +0 -69
  113. data/test/array_serializer_test.rb +0 -24
  114. data/test/benchmark/app.rb +0 -67
  115. data/test/benchmark/benchmarking_support.rb +0 -69
  116. data/test/benchmark/bm_active_record.rb +0 -83
  117. data/test/benchmark/bm_adapter.rb +0 -40
  118. data/test/benchmark/bm_caching.rb +0 -121
  119. data/test/benchmark/bm_lookup_chain.rb +0 -85
  120. data/test/benchmark/bm_transform.rb +0 -47
  121. data/test/benchmark/config.ru +0 -3
  122. data/test/benchmark/controllers.rb +0 -85
  123. data/test/benchmark/fixtures.rb +0 -221
  124. data/test/cache_test.rb +0 -717
  125. data/test/collection_serializer_test.rb +0 -129
  126. data/test/fixtures/active_record.rb +0 -115
  127. data/test/fixtures/poro.rb +0 -227
  128. data/test/generators/scaffold_controller_generator_test.rb +0 -26
  129. data/test/generators/serializer_generator_test.rb +0 -77
  130. data/test/grape_test.rb +0 -198
  131. data/test/lint_test.rb +0 -51
  132. data/test/logger_test.rb +0 -22
  133. data/test/poro_test.rb +0 -11
  134. data/test/serializable_resource_test.rb +0 -81
  135. data/test/serializers/association_macros_test.rb +0 -39
  136. data/test/serializers/associations_test.rb +0 -520
  137. data/test/serializers/attribute_test.rb +0 -155
  138. data/test/serializers/attributes_test.rb +0 -54
  139. data/test/serializers/caching_configuration_test_isolated.rb +0 -172
  140. data/test/serializers/configuration_test.rb +0 -34
  141. data/test/serializers/fieldset_test.rb +0 -16
  142. data/test/serializers/meta_test.rb +0 -204
  143. data/test/serializers/options_test.rb +0 -34
  144. data/test/serializers/read_attribute_for_serialization_test.rb +0 -81
  145. data/test/serializers/reflection_test.rb +0 -481
  146. data/test/serializers/root_test.rb +0 -23
  147. data/test/serializers/serialization_test.rb +0 -57
  148. data/test/serializers/serializer_for_test.rb +0 -138
  149. data/test/serializers/serializer_for_with_namespace_test.rb +0 -90
  150. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  151. data/test/support/isolated_unit.rb +0 -86
  152. data/test/support/rails5_shims.rb +0 -55
  153. data/test/support/rails_app.rb +0 -40
  154. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  155. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  156. data/test/support/schemas/custom/show.json +0 -7
  157. data/test/support/schemas/hyper_schema.json +0 -93
  158. data/test/support/schemas/render_using_json_api.json +0 -43
  159. data/test/support/schemas/simple_json_pointers.json +0 -10
  160. data/test/support/serialization_testing.rb +0 -81
  161. data/test/test_helper.rb +0 -72
@@ -1,514 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- class KeyCaseTest < ActiveSupport::TestCase
9
- class Post < ::Model
10
- attributes :title, :body, :publish_at
11
- associations :author, :comments
12
- end
13
- class Author < ::Model
14
- attributes :first_name, :last_name
15
- end
16
- class Comment < ::Model
17
- attributes :body
18
- associations :author, :post
19
- end
20
-
21
- class PostSerializer < ActiveModel::Serializer
22
- type 'posts'
23
- attributes :title, :body, :publish_at
24
- belongs_to :author
25
- has_many :comments
26
-
27
- link(:self) { post_url(object.id) }
28
- link(:post_authors) { post_authors_url(object.id) }
29
- link(:subscriber_comments) { post_comments_url(object.id) }
30
-
31
- meta do
32
- {
33
- rating: 5,
34
- favorite_count: 10
35
- }
36
- end
37
- end
38
-
39
- class AuthorSerializer < ActiveModel::Serializer
40
- type 'authors'
41
- attributes :first_name, :last_name
42
- end
43
-
44
- class CommentSerializer < ActiveModel::Serializer
45
- type 'comments'
46
- attributes :body
47
- belongs_to :author
48
- end
49
-
50
- def mock_request(transform = nil)
51
- context = Minitest::Mock.new
52
- context.expect(:request_url, URI)
53
- context.expect(:query_parameters, {})
54
- context.expect(:url_helpers, Rails.application.routes.url_helpers)
55
- @options = {}
56
- @options[:key_transform] = transform if transform
57
- @options[:serialization_context] = context
58
- end
59
-
60
- def setup
61
- Rails.application.routes.draw do
62
- resources :posts do
63
- resources :authors
64
- resources :comments
65
- end
66
- end
67
- @publish_at = 1.day.from_now
68
- @author = Author.new(id: 1, first_name: 'Bob', last_name: 'Jones')
69
- @comment1 = Comment.new(id: 7, body: 'cool', author: @author)
70
- @comment2 = Comment.new(id: 12, body: 'awesome', author: @author)
71
- @post = Post.new(id: 1337, title: 'Title 1', body: 'Body 1',
72
- author: @author, comments: [@comment1, @comment2],
73
- publish_at: @publish_at)
74
- @comment1.post = @post
75
- @comment2.post = @post
76
- end
77
-
78
- def test_success_document_transform_default
79
- mock_request
80
- serializer = PostSerializer.new(@post)
81
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
82
- result = adapter.serializable_hash
83
- assert_equal({
84
- data: {
85
- id: '1337',
86
- type: 'posts',
87
- attributes: {
88
- title: 'Title 1',
89
- body: 'Body 1',
90
- :"publish-at" => @publish_at
91
- },
92
- relationships: {
93
- author: {
94
- data: { id: '1', type: 'authors' }
95
- },
96
- comments: {
97
- data: [
98
- { id: '7', type: 'comments' },
99
- { id: '12', type: 'comments' }
100
- ]
101
- }
102
- },
103
- links: {
104
- self: 'http://example.com/posts/1337',
105
- :"post-authors" => 'http://example.com/posts/1337/authors',
106
- :"subscriber-comments" => 'http://example.com/posts/1337/comments'
107
- },
108
- meta: { rating: 5, :"favorite-count" => 10 }
109
- }
110
- }, result)
111
- end
112
-
113
- def test_success_document_transform_global_config
114
- mock_request
115
- result = with_config(key_transform: :camel_lower) do
116
- serializer = PostSerializer.new(@post)
117
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
118
- adapter.serializable_hash
119
- end
120
- assert_equal({
121
- data: {
122
- id: '1337',
123
- type: 'posts',
124
- attributes: {
125
- title: 'Title 1',
126
- body: 'Body 1',
127
- publishAt: @publish_at
128
- },
129
- relationships: {
130
- author: {
131
- data: { id: '1', type: 'authors' }
132
- },
133
- comments: {
134
- data: [
135
- { id: '7', type: 'comments' },
136
- { id: '12', type: 'comments' }
137
- ]
138
- }
139
- },
140
- links: {
141
- self: 'http://example.com/posts/1337',
142
- postAuthors: 'http://example.com/posts/1337/authors',
143
- subscriberComments: 'http://example.com/posts/1337/comments'
144
- },
145
- meta: { rating: 5, favoriteCount: 10 }
146
- }
147
- }, result)
148
- end
149
-
150
- def test_success_doc_transform_serialization_ctx_overrides_global
151
- mock_request(:camel)
152
- result = with_config(key_transform: :camel_lower) do
153
- serializer = PostSerializer.new(@post)
154
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
155
- adapter.serializable_hash
156
- end
157
- assert_equal({
158
- Data: {
159
- Id: '1337',
160
- Type: 'Posts',
161
- Attributes: {
162
- Title: 'Title 1',
163
- Body: 'Body 1',
164
- PublishAt: @publish_at
165
- },
166
- Relationships: {
167
- Author: {
168
- Data: { Id: '1', Type: 'Authors' }
169
- },
170
- Comments: {
171
- Data: [
172
- { Id: '7', Type: 'Comments' },
173
- { Id: '12', Type: 'Comments' }
174
- ]
175
- }
176
- },
177
- Links: {
178
- Self: 'http://example.com/posts/1337',
179
- PostAuthors: 'http://example.com/posts/1337/authors',
180
- SubscriberComments: 'http://example.com/posts/1337/comments'
181
- },
182
- Meta: { Rating: 5, FavoriteCount: 10 }
183
- }
184
- }, result)
185
- end
186
-
187
- def test_success_document_transform_dash
188
- mock_request(:dash)
189
- serializer = PostSerializer.new(@post)
190
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
191
- result = adapter.serializable_hash
192
- assert_equal({
193
- data: {
194
- id: '1337',
195
- type: 'posts',
196
- attributes: {
197
- title: 'Title 1',
198
- body: 'Body 1',
199
- :"publish-at" => @publish_at
200
- },
201
- relationships: {
202
- author: {
203
- data: { id: '1', type: 'authors' }
204
- },
205
- comments: {
206
- data: [
207
- { id: '7', type: 'comments' },
208
- { id: '12', type: 'comments' }
209
- ]
210
- }
211
- },
212
- links: {
213
- self: 'http://example.com/posts/1337',
214
- :"post-authors" => 'http://example.com/posts/1337/authors',
215
- :"subscriber-comments" => 'http://example.com/posts/1337/comments'
216
- },
217
- meta: { rating: 5, :"favorite-count" => 10 }
218
- }
219
- }, result)
220
- end
221
-
222
- def test_success_document_transform_unaltered
223
- mock_request(:unaltered)
224
- serializer = PostSerializer.new(@post)
225
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
226
- result = adapter.serializable_hash
227
- assert_equal({
228
- data: {
229
- id: '1337',
230
- type: 'posts',
231
- attributes: {
232
- title: 'Title 1',
233
- body: 'Body 1',
234
- publish_at: @publish_at
235
- },
236
- relationships: {
237
- author: {
238
- data: { id: '1', type: 'authors' }
239
- },
240
- comments: {
241
- data: [
242
- { id: '7', type: 'comments' },
243
- { id: '12', type: 'comments' }
244
- ]
245
- }
246
- },
247
- links: {
248
- self: 'http://example.com/posts/1337',
249
- post_authors: 'http://example.com/posts/1337/authors',
250
- subscriber_comments: 'http://example.com/posts/1337/comments'
251
- },
252
- meta: { rating: 5, favorite_count: 10 }
253
- }
254
- }, result)
255
- end
256
-
257
- def test_success_document_transform_undefined
258
- mock_request(:zoot)
259
- serializer = PostSerializer.new(@post)
260
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
261
- exception = assert_raises NoMethodError do
262
- adapter.serializable_hash
263
- end
264
- assert_match(/undefined method.*zoot/, exception.message)
265
- end
266
-
267
- def test_success_document_transform_camel
268
- mock_request(:camel)
269
- serializer = PostSerializer.new(@post)
270
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
271
- result = adapter.serializable_hash
272
- assert_equal({
273
- Data: {
274
- Id: '1337',
275
- Type: 'Posts',
276
- Attributes: {
277
- Title: 'Title 1',
278
- Body: 'Body 1',
279
- PublishAt: @publish_at
280
- },
281
- Relationships: {
282
- Author: {
283
- Data: { Id: '1', Type: 'Authors' }
284
- },
285
- Comments: {
286
- Data: [
287
- { Id: '7', Type: 'Comments' },
288
- { Id: '12', Type: 'Comments' }
289
- ]
290
- }
291
- },
292
- Links: {
293
- Self: 'http://example.com/posts/1337',
294
- PostAuthors: 'http://example.com/posts/1337/authors',
295
- SubscriberComments: 'http://example.com/posts/1337/comments'
296
- },
297
- Meta: { Rating: 5, FavoriteCount: 10 }
298
- }
299
- }, result)
300
- end
301
-
302
- def test_success_document_transform_camel_lower
303
- mock_request(:camel_lower)
304
- serializer = PostSerializer.new(@post)
305
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
306
- result = adapter.serializable_hash
307
- assert_equal({
308
- data: {
309
- id: '1337',
310
- type: 'posts',
311
- attributes: {
312
- title: 'Title 1',
313
- body: 'Body 1',
314
- publishAt: @publish_at
315
- },
316
- relationships: {
317
- author: {
318
- data: { id: '1', type: 'authors' }
319
- },
320
- comments: {
321
- data: [
322
- { id: '7', type: 'comments' },
323
- { id: '12', type: 'comments' }
324
- ]
325
- }
326
- },
327
- links: {
328
- self: 'http://example.com/posts/1337',
329
- postAuthors: 'http://example.com/posts/1337/authors',
330
- subscriberComments: 'http://example.com/posts/1337/comments'
331
- },
332
- meta: { rating: 5, favoriteCount: 10 }
333
- }
334
- }, result)
335
- end
336
-
337
- def test_error_document_transform_default
338
- mock_request
339
- resource = ModelWithErrors.new
340
- resource.errors.add(:published_at, 'must be in the future')
341
- resource.errors.add(:title, 'must be longer')
342
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
343
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
344
- result = adapter.serializable_hash
345
- expected_errors_object = {
346
- errors: [
347
- {
348
- source: { pointer: '/data/attributes/published-at' },
349
- detail: 'must be in the future'
350
- },
351
- {
352
- source: { pointer: '/data/attributes/title' },
353
- detail: 'must be longer'
354
- }
355
- ]
356
- }
357
- assert_equal expected_errors_object, result
358
- end
359
-
360
- def test_error_document_transform_global_config
361
- mock_request
362
- result = with_config(key_transform: :camel) do
363
- resource = ModelWithErrors.new
364
- resource.errors.add(:published_at, 'must be in the future')
365
- resource.errors.add(:title, 'must be longer')
366
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
367
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
368
- adapter.serializable_hash
369
- end
370
- expected_errors_object = {
371
- Errors: [
372
- {
373
- Source: { Pointer: '/data/attributes/PublishedAt' },
374
- Detail: 'must be in the future'
375
- },
376
- {
377
- Source: { Pointer: '/data/attributes/Title' },
378
- Detail: 'must be longer'
379
- }
380
- ]
381
- }
382
- assert_equal expected_errors_object, result
383
- end
384
-
385
- def test_error_document_transform_serialization_ctx_overrides_global
386
- mock_request(:camel)
387
- result = with_config(key_transform: :camel_lower) do
388
- resource = ModelWithErrors.new
389
- resource.errors.add(:published_at, 'must be in the future')
390
- resource.errors.add(:title, 'must be longer')
391
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
392
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
393
- adapter.serializable_hash
394
- end
395
- expected_errors_object = {
396
- Errors: [
397
- {
398
- Source: { Pointer: '/data/attributes/PublishedAt' },
399
- Detail: 'must be in the future'
400
- },
401
- {
402
- Source: { Pointer: '/data/attributes/Title' },
403
- Detail: 'must be longer'
404
- }
405
- ]
406
- }
407
- assert_equal expected_errors_object, result
408
- end
409
-
410
- def test_error_document_transform_dash
411
- mock_request(:dash)
412
-
413
- resource = ModelWithErrors.new
414
- resource.errors.add(:published_at, 'must be in the future')
415
- resource.errors.add(:title, 'must be longer')
416
-
417
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
418
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
419
- result = adapter.serializable_hash
420
-
421
- expected_errors_object = {
422
- errors: [
423
- {
424
- source: { pointer: '/data/attributes/published-at' },
425
- detail: 'must be in the future'
426
- },
427
- {
428
- source: { pointer: '/data/attributes/title' },
429
- detail: 'must be longer'
430
- }
431
- ]
432
- }
433
- assert_equal expected_errors_object, result
434
- end
435
-
436
- def test_error_document_transform_unaltered
437
- mock_request(:unaltered)
438
-
439
- resource = ModelWithErrors.new
440
- resource.errors.add(:published_at, 'must be in the future')
441
- resource.errors.add(:title, 'must be longer')
442
-
443
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
444
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
445
- result = adapter.serializable_hash
446
-
447
- expected_errors_object = {
448
- errors: [
449
- { source: { pointer: '/data/attributes/published_at' }, detail: 'must be in the future' },
450
- { source: { pointer: '/data/attributes/title' }, detail: 'must be longer' }
451
- ]
452
- }
453
- assert_equal expected_errors_object, result
454
- end
455
-
456
- def test_error_document_transform_undefined
457
- mock_request(:krazy)
458
-
459
- resource = ModelWithErrors.new
460
- resource.errors.add(:published_at, 'must be in the future')
461
- resource.errors.add(:title, 'must be longer')
462
-
463
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
464
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
465
-
466
- exception = assert_raises NoMethodError do
467
- adapter.serializable_hash
468
- end
469
- assert_match(/undefined method.*krazy/, exception.message)
470
- end
471
-
472
- def test_error_document_transform_camel
473
- mock_request(:camel)
474
-
475
- resource = ModelWithErrors.new
476
- resource.errors.add(:published_at, 'must be in the future')
477
- resource.errors.add(:title, 'must be longer')
478
-
479
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
480
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
481
- result = adapter.serializable_hash
482
-
483
- expected_errors_object = {
484
- Errors: [
485
- { Source: { Pointer: '/data/attributes/PublishedAt' }, Detail: 'must be in the future' },
486
- { Source: { Pointer: '/data/attributes/Title' }, Detail: 'must be longer' }
487
- ]
488
- }
489
- assert_equal expected_errors_object, result
490
- end
491
-
492
- def test_error_document_transform_camel_lower
493
- mock_request(:camel_lower)
494
-
495
- resource = ModelWithErrors.new
496
- resource.errors.add(:published_at, 'must be in the future')
497
- resource.errors.add(:title, 'must be longer')
498
-
499
- serializer = ActiveModel::Serializer::ErrorSerializer.new(resource)
500
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, @options)
501
- result = adapter.serializable_hash
502
-
503
- expected_errors_object = {
504
- errors: [
505
- { source: { pointer: '/data/attributes/publishedAt' }, detail: 'must be in the future' },
506
- { source: { pointer: '/data/attributes/title' }, detail: 'must be longer' }
507
- ]
508
- }
509
- assert_equal expected_errors_object, result
510
- end
511
- end
512
- end
513
- end
514
- end