active_model_serializers 0.10.6 → 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 (215) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +114 -1
  3. data/README.md +21 -24
  4. data/lib/action_controller/serialization.rb +11 -1
  5. data/lib/active_model/serializable_resource.rb +2 -0
  6. data/lib/active_model/serializer/adapter/attributes.rb +2 -0
  7. data/lib/active_model/serializer/adapter/base.rb +2 -0
  8. data/lib/active_model/serializer/adapter/json.rb +2 -0
  9. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  10. data/lib/active_model/serializer/adapter/null.rb +2 -0
  11. data/lib/active_model/serializer/adapter.rb +2 -0
  12. data/lib/active_model/serializer/array_serializer.rb +2 -0
  13. data/lib/active_model/serializer/association.rb +2 -0
  14. data/lib/active_model/serializer/attribute.rb +2 -0
  15. data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
  16. data/lib/active_model/serializer/collection_serializer.rb +17 -5
  17. data/lib/active_model/serializer/concerns/caching.rb +7 -2
  18. data/lib/active_model/serializer/error_serializer.rb +2 -0
  19. data/lib/active_model/serializer/errors_serializer.rb +2 -0
  20. data/lib/active_model/serializer/field.rb +2 -0
  21. data/lib/active_model/serializer/fieldset.rb +3 -1
  22. data/lib/active_model/serializer/has_many_reflection.rb +2 -0
  23. data/lib/active_model/serializer/has_one_reflection.rb +2 -0
  24. data/lib/active_model/serializer/lazy_association.rb +6 -2
  25. data/lib/active_model/serializer/link.rb +23 -0
  26. data/lib/active_model/serializer/lint.rb +2 -0
  27. data/lib/active_model/serializer/null.rb +2 -0
  28. data/lib/active_model/serializer/reflection.rb +10 -5
  29. data/lib/active_model/serializer/version.rb +3 -1
  30. data/lib/active_model/serializer.rb +37 -19
  31. data/lib/active_model_serializers/adapter/attributes.rb +23 -0
  32. data/lib/active_model_serializers/adapter/base.rb +2 -0
  33. data/lib/active_model_serializers/adapter/json.rb +2 -0
  34. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +3 -1
  35. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  37. data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
  38. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  39. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +45 -20
  40. data/lib/active_model_serializers/adapter/json_api/relationship.rb +18 -4
  41. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +33 -25
  42. data/lib/active_model_serializers/adapter/json_api.rb +14 -9
  43. data/lib/active_model_serializers/adapter/null.rb +2 -0
  44. data/lib/active_model_serializers/adapter.rb +3 -1
  45. data/lib/active_model_serializers/callbacks.rb +2 -0
  46. data/lib/active_model_serializers/deprecate.rb +2 -0
  47. data/lib/active_model_serializers/deserialization.rb +2 -0
  48. data/lib/active_model_serializers/json_pointer.rb +2 -0
  49. data/lib/active_model_serializers/logging.rb +2 -0
  50. data/lib/active_model_serializers/lookup_chain.rb +2 -0
  51. data/lib/active_model_serializers/model/caching.rb +26 -0
  52. data/lib/active_model_serializers/model.rb +2 -0
  53. data/lib/active_model_serializers/railtie.rb +4 -0
  54. data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
  55. data/lib/active_model_serializers/serializable_resource.rb +4 -2
  56. data/lib/active_model_serializers/serialization_context.rb +2 -0
  57. data/lib/active_model_serializers/test/schema.rb +2 -0
  58. data/lib/active_model_serializers/test/serializer.rb +2 -0
  59. data/lib/active_model_serializers/test.rb +2 -0
  60. data/lib/active_model_serializers.rb +21 -11
  61. data/lib/generators/rails/resource_override.rb +2 -0
  62. data/lib/generators/rails/serializer_generator.rb +2 -0
  63. data/lib/grape/active_model_serializers.rb +2 -0
  64. data/lib/grape/formatters/active_model_serializers.rb +2 -0
  65. data/lib/grape/helpers/active_model_serializers.rb +2 -0
  66. data/lib/tasks/rubocop.rake +2 -0
  67. metadata +43 -298
  68. data/.github/ISSUE_TEMPLATE.md +0 -29
  69. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  70. data/.gitignore +0 -35
  71. data/.rubocop.yml +0 -105
  72. data/.simplecov +0 -110
  73. data/.travis.yml +0 -55
  74. data/CODE_OF_CONDUCT.md +0 -74
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -56
  77. data/Rakefile +0 -74
  78. data/active_model_serializers.gemspec +0 -63
  79. data/appveyor.yml +0 -30
  80. data/bin/bench +0 -171
  81. data/bin/bench_regression +0 -316
  82. data/bin/rubocop +0 -38
  83. data/bin/serve_benchmark +0 -39
  84. data/docs/README.md +0 -41
  85. data/docs/STYLE.md +0 -58
  86. data/docs/general/adapters.md +0 -263
  87. data/docs/general/caching.md +0 -58
  88. data/docs/general/configuration_options.md +0 -169
  89. data/docs/general/deserialization.md +0 -100
  90. data/docs/general/fields.md +0 -31
  91. data/docs/general/getting_started.md +0 -133
  92. data/docs/general/instrumentation.md +0 -40
  93. data/docs/general/key_transforms.md +0 -40
  94. data/docs/general/logging.md +0 -21
  95. data/docs/general/rendering.md +0 -293
  96. data/docs/general/serializers.md +0 -480
  97. data/docs/how-open-source-maintained.jpg +0 -0
  98. data/docs/howto/add_pagination_links.md +0 -138
  99. data/docs/howto/add_relationship_links.md +0 -140
  100. data/docs/howto/add_root_key.md +0 -55
  101. data/docs/howto/grape_integration.md +0 -42
  102. data/docs/howto/outside_controller_use.md +0 -66
  103. data/docs/howto/passing_arbitrary_options.md +0 -27
  104. data/docs/howto/serialize_poro.md +0 -73
  105. data/docs/howto/test.md +0 -154
  106. data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
  107. data/docs/integrations/ember-and-json-api.md +0 -147
  108. data/docs/integrations/grape.md +0 -19
  109. data/docs/jsonapi/errors.md +0 -56
  110. data/docs/jsonapi/schema/schema.json +0 -366
  111. data/docs/jsonapi/schema.md +0 -151
  112. data/docs/rfcs/0000-namespace.md +0 -106
  113. data/docs/rfcs/template.md +0 -15
  114. data/test/action_controller/adapter_selector_test.rb +0 -62
  115. data/test/action_controller/explicit_serializer_test.rb +0 -135
  116. data/test/action_controller/json/include_test.rb +0 -246
  117. data/test/action_controller/json_api/deserialization_test.rb +0 -112
  118. data/test/action_controller/json_api/errors_test.rb +0 -40
  119. data/test/action_controller/json_api/fields_test.rb +0 -66
  120. data/test/action_controller/json_api/linked_test.rb +0 -202
  121. data/test/action_controller/json_api/pagination_test.rb +0 -116
  122. data/test/action_controller/json_api/transform_test.rb +0 -189
  123. data/test/action_controller/lookup_proc_test.rb +0 -49
  124. data/test/action_controller/namespace_lookup_test.rb +0 -232
  125. data/test/action_controller/serialization_scope_name_test.rb +0 -235
  126. data/test/action_controller/serialization_test.rb +0 -472
  127. data/test/active_model_serializers/adapter_for_test.rb +0 -208
  128. data/test/active_model_serializers/json_pointer_test.rb +0 -22
  129. data/test/active_model_serializers/logging_test.rb +0 -77
  130. data/test/active_model_serializers/model_test.rb +0 -142
  131. data/test/active_model_serializers/railtie_test_isolated.rb +0 -68
  132. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -161
  133. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -71
  134. data/test/active_model_serializers/test/schema_test.rb +0 -131
  135. data/test/active_model_serializers/test/serializer_test.rb +0 -62
  136. data/test/active_record_test.rb +0 -9
  137. data/test/adapter/attributes_test.rb +0 -40
  138. data/test/adapter/deprecation_test.rb +0 -100
  139. data/test/adapter/json/belongs_to_test.rb +0 -45
  140. data/test/adapter/json/collection_test.rb +0 -104
  141. data/test/adapter/json/has_many_test.rb +0 -53
  142. data/test/adapter/json/transform_test.rb +0 -93
  143. data/test/adapter/json_api/belongs_to_test.rb +0 -155
  144. data/test/adapter/json_api/collection_test.rb +0 -96
  145. data/test/adapter/json_api/errors_test.rb +0 -76
  146. data/test/adapter/json_api/fields_test.rb +0 -96
  147. data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
  148. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
  149. data/test/adapter/json_api/has_many_test.rb +0 -173
  150. data/test/adapter/json_api/has_one_test.rb +0 -80
  151. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -183
  152. data/test/adapter/json_api/json_api_test.rb +0 -33
  153. data/test/adapter/json_api/linked_test.rb +0 -413
  154. data/test/adapter/json_api/links_test.rb +0 -95
  155. data/test/adapter/json_api/pagination_links_test.rb +0 -193
  156. data/test/adapter/json_api/parse_test.rb +0 -137
  157. data/test/adapter/json_api/relationship_test.rb +0 -397
  158. data/test/adapter/json_api/resource_identifier_test.rb +0 -110
  159. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  160. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  161. data/test/adapter/json_api/transform_test.rb +0 -512
  162. data/test/adapter/json_api/type_test.rb +0 -61
  163. data/test/adapter/json_test.rb +0 -46
  164. data/test/adapter/null_test.rb +0 -22
  165. data/test/adapter/polymorphic_test.rb +0 -171
  166. data/test/adapter_test.rb +0 -67
  167. data/test/array_serializer_test.rb +0 -22
  168. data/test/benchmark/app.rb +0 -65
  169. data/test/benchmark/benchmarking_support.rb +0 -67
  170. data/test/benchmark/bm_active_record.rb +0 -81
  171. data/test/benchmark/bm_adapter.rb +0 -38
  172. data/test/benchmark/bm_caching.rb +0 -119
  173. data/test/benchmark/bm_lookup_chain.rb +0 -83
  174. data/test/benchmark/bm_transform.rb +0 -45
  175. data/test/benchmark/config.ru +0 -3
  176. data/test/benchmark/controllers.rb +0 -83
  177. data/test/benchmark/fixtures.rb +0 -219
  178. data/test/cache_test.rb +0 -651
  179. data/test/collection_serializer_test.rb +0 -123
  180. data/test/fixtures/active_record.rb +0 -113
  181. data/test/fixtures/poro.rb +0 -225
  182. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  183. data/test/generators/serializer_generator_test.rb +0 -75
  184. data/test/grape_test.rb +0 -196
  185. data/test/lint_test.rb +0 -49
  186. data/test/logger_test.rb +0 -20
  187. data/test/poro_test.rb +0 -9
  188. data/test/serializable_resource_test.rb +0 -79
  189. data/test/serializers/association_macros_test.rb +0 -37
  190. data/test/serializers/associations_test.rb +0 -424
  191. data/test/serializers/attribute_test.rb +0 -153
  192. data/test/serializers/attributes_test.rb +0 -52
  193. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  194. data/test/serializers/configuration_test.rb +0 -32
  195. data/test/serializers/fieldset_test.rb +0 -14
  196. data/test/serializers/meta_test.rb +0 -202
  197. data/test/serializers/options_test.rb +0 -32
  198. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  199. data/test/serializers/reflection_test.rb +0 -427
  200. data/test/serializers/root_test.rb +0 -21
  201. data/test/serializers/serialization_test.rb +0 -55
  202. data/test/serializers/serializer_for_test.rb +0 -136
  203. data/test/serializers/serializer_for_with_namespace_test.rb +0 -88
  204. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  205. data/test/support/isolated_unit.rb +0 -82
  206. data/test/support/rails5_shims.rb +0 -53
  207. data/test/support/rails_app.rb +0 -38
  208. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  209. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  210. data/test/support/schemas/custom/show.json +0 -7
  211. data/test/support/schemas/hyper_schema.json +0 -93
  212. data/test/support/schemas/render_using_json_api.json +0 -43
  213. data/test/support/schemas/simple_json_pointers.json +0 -10
  214. data/test/support/serialization_testing.rb +0 -71
  215. data/test/test_helper.rb +0 -70
@@ -1,472 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActionController
4
- module Serialization
5
- class ImplicitSerializerTest < ActionController::TestCase
6
- class ImplicitSerializationTestController < ActionController::Base
7
- include SerializationTesting
8
- def render_using_implicit_serializer
9
- @profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
10
- render json: @profile
11
- end
12
-
13
- def render_using_default_adapter_root
14
- @profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
15
- render json: @profile
16
- end
17
-
18
- def render_array_using_custom_root
19
- @profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
20
- render json: [@profile], root: 'custom_root'
21
- end
22
-
23
- def render_array_that_is_empty_using_custom_root
24
- render json: [], root: 'custom_root'
25
- end
26
-
27
- def render_object_using_custom_root
28
- @profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
29
- render json: @profile, root: 'custom_root'
30
- end
31
-
32
- def render_array_using_implicit_serializer
33
- array = [
34
- Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
35
- Profile.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2')
36
- ]
37
- render json: array
38
- end
39
-
40
- def render_array_using_implicit_serializer_and_meta
41
- @profiles = [
42
- Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
43
- ]
44
- render json: @profiles, meta: { total: 10 }
45
- end
46
-
47
- def render_array_using_implicit_serializer_and_links
48
- with_adapter ActiveModelSerializers::Adapter::JsonApi do
49
- @profiles = [
50
- Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
51
- ]
52
-
53
- render json: @profiles, links: { self: 'http://example.com/api/profiles/1' }
54
- end
55
- end
56
-
57
- def render_object_with_cache_enabled
58
- @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
59
- @author = Author.new(id: 1, name: 'Joao Moura.')
60
- @post = Post.new(id: 1, title: 'New Post', body: 'Body', comments: [@comment], author: @author)
61
-
62
- generate_cached_serializer(@post)
63
-
64
- @post.title = 'ZOMG a New Post'
65
- render json: @post
66
- end
67
-
68
- def render_json_object_without_serializer
69
- render json: { error: 'Result is Invalid' }
70
- end
71
-
72
- def render_json_array_object_without_serializer
73
- render json: [{ error: 'Result is Invalid' }]
74
- end
75
-
76
- def update_and_render_object_with_cache_enabled
77
- @post.updated_at = Time.zone.now
78
-
79
- generate_cached_serializer(@post)
80
- render json: @post
81
- end
82
-
83
- def render_object_expired_with_cache_enabled
84
- comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
85
- author = Author.new(id: 1, name: 'Joao Moura.')
86
- post = Post.new(id: 1, title: 'New Post', body: 'Body', comments: [comment], author: author)
87
-
88
- generate_cached_serializer(post)
89
-
90
- post.title = 'ZOMG a New Post'
91
-
92
- expires_in = [
93
- PostSerializer._cache_options[:expires_in],
94
- CommentSerializer._cache_options[:expires_in]
95
- ].max + 200
96
-
97
- Timecop.travel(Time.zone.now + expires_in) do
98
- render json: post
99
- end
100
- end
101
-
102
- def render_changed_object_with_cache_enabled
103
- comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
104
- author = Author.new(id: 1, name: 'Joao Moura.')
105
- post = Post.new(id: 1, title: 'ZOMG a New Post', body: 'Body', comments: [comment], author: author)
106
-
107
- render json: post
108
- end
109
-
110
- def render_fragment_changed_object_with_only_cache_enabled
111
- author = Author.new(id: 1, name: 'Joao Moura.')
112
- role = Role.new(id: 42, name: 'ZOMG A ROLE', description: 'DESCRIPTION HERE', author: author)
113
-
114
- generate_cached_serializer(role)
115
- role.name = 'lol'
116
- role.description = 'HUEHUEBRBR'
117
-
118
- render json: role
119
- end
120
-
121
- def render_fragment_changed_object_with_except_cache_enabled
122
- author = Author.new(id: 1, name: 'Joao Moura.')
123
- bio = Bio.new(id: 42, content: 'ZOMG A ROLE', rating: 5, author: author)
124
-
125
- generate_cached_serializer(bio)
126
- bio.content = 'lol'
127
- bio.rating = 0
128
-
129
- render json: bio
130
- end
131
-
132
- def render_fragment_changed_object_with_relationship
133
- comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
134
- comment2 = Comment.new(id: 1, body: 'ZOMG AN UPDATED-BUT-NOT-CACHE-EXPIRED COMMENT')
135
- like = Like.new(id: 1, likeable: comment, time: 3.days.ago)
136
-
137
- generate_cached_serializer(like)
138
- like.likeable = comment2
139
- like.time = Time.zone.now.to_s
140
-
141
- render json: like
142
- end
143
- end
144
-
145
- tests ImplicitSerializationTestController
146
-
147
- # We just have Null for now, this will change
148
- def test_render_using_implicit_serializer
149
- get :render_using_implicit_serializer
150
-
151
- expected = {
152
- name: 'Name 1',
153
- description: 'Description 1'
154
- }
155
-
156
- assert_equal 'application/json', @response.content_type
157
- assert_equal expected.to_json, @response.body
158
- end
159
-
160
- def test_render_using_default_root
161
- with_adapter :json_api do
162
- get :render_using_default_adapter_root
163
- end
164
- expected = {
165
- data: {
166
- id: @controller.instance_variable_get(:@profile).id.to_s,
167
- type: 'profiles',
168
- attributes: {
169
- name: 'Name 1',
170
- description: 'Description 1'
171
- }
172
- }
173
- }
174
-
175
- assert_equal 'application/json', @response.content_type
176
- assert_equal expected.to_json, @response.body
177
- end
178
-
179
- def test_render_array_using_custom_root
180
- with_adapter :json do
181
- get :render_array_using_custom_root
182
- end
183
- expected = { custom_root: [{ name: 'Name 1', description: 'Description 1' }] }
184
- assert_equal 'application/json', @response.content_type
185
- assert_equal expected.to_json, @response.body
186
- end
187
-
188
- def test_render_array_that_is_empty_using_custom_root
189
- with_adapter :json do
190
- get :render_array_that_is_empty_using_custom_root
191
- end
192
-
193
- expected = { custom_root: [] }
194
- assert_equal 'application/json', @response.content_type
195
- assert_equal expected.to_json, @response.body
196
- end
197
-
198
- def test_render_object_using_custom_root
199
- with_adapter :json do
200
- get :render_object_using_custom_root
201
- end
202
-
203
- expected = { custom_root: { name: 'Name 1', description: 'Description 1' } }
204
- assert_equal 'application/json', @response.content_type
205
- assert_equal expected.to_json, @response.body
206
- end
207
-
208
- def test_render_json_object_without_serializer
209
- get :render_json_object_without_serializer
210
-
211
- assert_equal 'application/json', @response.content_type
212
- expected_body = { error: 'Result is Invalid' }
213
- assert_equal expected_body.to_json, @response.body
214
- end
215
-
216
- def test_render_json_array_object_without_serializer
217
- get :render_json_array_object_without_serializer
218
-
219
- assert_equal 'application/json', @response.content_type
220
- expected_body = [{ error: 'Result is Invalid' }]
221
- assert_equal expected_body.to_json, @response.body
222
- end
223
-
224
- def test_render_array_using_implicit_serializer
225
- get :render_array_using_implicit_serializer
226
- assert_equal 'application/json', @response.content_type
227
-
228
- expected = [
229
- {
230
- name: 'Name 1',
231
- description: 'Description 1'
232
- },
233
- {
234
- name: 'Name 2',
235
- description: 'Description 2'
236
- }
237
- ]
238
-
239
- assert_equal expected.to_json, @response.body
240
- end
241
-
242
- def test_render_array_using_implicit_serializer_and_meta
243
- with_adapter :json_api do
244
- get :render_array_using_implicit_serializer_and_meta
245
- end
246
- expected = {
247
- data: [
248
- {
249
- id: @controller.instance_variable_get(:@profiles).first.id.to_s,
250
- type: 'profiles',
251
- attributes: {
252
- name: 'Name 1',
253
- description: 'Description 1'
254
- }
255
- }
256
- ],
257
- meta: {
258
- total: 10
259
- }
260
- }
261
-
262
- assert_equal 'application/json', @response.content_type
263
- assert_equal expected.to_json, @response.body
264
- end
265
-
266
- def test_render_array_using_implicit_serializer_and_links
267
- get :render_array_using_implicit_serializer_and_links
268
-
269
- expected = {
270
- data: [
271
- {
272
- id: @controller.instance_variable_get(:@profiles).first.id.to_s,
273
- type: 'profiles',
274
- attributes: {
275
- name: 'Name 1',
276
- description: 'Description 1'
277
- }
278
- }
279
- ],
280
- links: {
281
- self: 'http://example.com/api/profiles/1'
282
- }
283
- }
284
-
285
- assert_equal 'application/json', @response.content_type
286
- assert_equal expected.to_json, @response.body
287
- end
288
-
289
- def test_render_with_cache_enable
290
- expected = {
291
- id: 1,
292
- title: 'New Post',
293
- body: 'Body',
294
- comments: [
295
- {
296
- id: 1,
297
- body: 'ZOMG A COMMENT'
298
- }
299
- ],
300
- blog: {
301
- id: 999,
302
- name: 'Custom blog'
303
- },
304
- author: {
305
- id: 1,
306
- name: 'Joao Moura.'
307
- }
308
- }
309
-
310
- ActionController::Base.cache_store.clear
311
- Timecop.freeze(Time.zone.now) do
312
- get :render_object_with_cache_enabled
313
-
314
- assert_equal 'application/json', @response.content_type
315
- assert_equal expected.to_json, @response.body
316
-
317
- get :render_changed_object_with_cache_enabled
318
- assert_equal expected.to_json, @response.body
319
- end
320
-
321
- ActionController::Base.cache_store.clear
322
- get :render_changed_object_with_cache_enabled
323
- assert_not_equal expected.to_json, @response.body
324
- end
325
-
326
- def test_render_with_cache_enable_and_expired
327
- ActionController::Base.cache_store.clear
328
- get :render_object_expired_with_cache_enabled
329
-
330
- expected = {
331
- id: 1,
332
- title: 'ZOMG a New Post',
333
- body: 'Body',
334
- comments: [
335
- {
336
- id: 1,
337
- body: 'ZOMG A COMMENT'
338
- }
339
- ],
340
- blog: {
341
- id: 999,
342
- name: 'Custom blog'
343
- },
344
- author: {
345
- id: 1,
346
- name: 'Joao Moura.'
347
- }
348
- }
349
-
350
- assert_equal 'application/json', @response.content_type
351
- actual = @response.body
352
- expected = expected.to_json
353
- if ENV['APPVEYOR'] && actual != expected
354
- skip('Cache expiration tests sometimes fail on Appveyor. FIXME :)')
355
- else
356
- assert_equal actual, expected
357
- end
358
- end
359
-
360
- def test_render_with_fragment_only_cache_enable
361
- ActionController::Base.cache_store.clear
362
- get :render_fragment_changed_object_with_only_cache_enabled
363
- response = JSON.parse(@response.body)
364
-
365
- assert_equal 'application/json', @response.content_type
366
- assert_equal 'ZOMG A ROLE', response['name']
367
- assert_equal 'HUEHUEBRBR', response['description']
368
- end
369
-
370
- def test_render_with_fragment_except_cache_enable
371
- ActionController::Base.cache_store.clear
372
- get :render_fragment_changed_object_with_except_cache_enabled
373
- response = JSON.parse(@response.body)
374
-
375
- assert_equal 'application/json', @response.content_type
376
- assert_equal 5, response['rating']
377
- assert_equal 'lol', response['content']
378
- end
379
-
380
- def test_render_fragment_changed_object_with_relationship
381
- ActionController::Base.cache_store.clear
382
-
383
- Timecop.freeze(Time.zone.now) do
384
- get :render_fragment_changed_object_with_relationship
385
- response = JSON.parse(@response.body)
386
-
387
- expected_return = {
388
- 'id' => 1,
389
- 'time' => Time.zone.now.to_s,
390
- 'likeable' => {
391
- 'id' => 1,
392
- 'body' => 'ZOMG A COMMENT'
393
- }
394
- }
395
-
396
- assert_equal 'application/json', @response.content_type
397
- assert_equal expected_return, response
398
- end
399
- end
400
-
401
- def test_cache_expiration_on_update
402
- ActionController::Base.cache_store.clear
403
- get :render_object_with_cache_enabled
404
-
405
- expected = {
406
- id: 1,
407
- title: 'ZOMG a New Post',
408
- body: 'Body',
409
- comments: [
410
- {
411
- id: 1,
412
- body: 'ZOMG A COMMENT'
413
- }
414
- ],
415
- blog: {
416
- id: 999,
417
- name: 'Custom blog'
418
- },
419
- author: {
420
- id: 1,
421
- name: 'Joao Moura.'
422
- }
423
- }
424
-
425
- get :update_and_render_object_with_cache_enabled
426
-
427
- assert_equal 'application/json', @response.content_type
428
- actual = @response.body
429
- expected = expected.to_json
430
- if ENV['APPVEYOR'] && actual != expected
431
- skip('Cache expiration tests sometimes fail on Appveyor. FIXME :)')
432
- else
433
- assert_equal actual, expected
434
- end
435
- end
436
-
437
- def test_warn_overridding_use_adapter_as_falsy_on_controller_instance
438
- controller = Class.new(ImplicitSerializationTestController) do
439
- def use_adapter?
440
- false
441
- end
442
- end.new
443
- assert_output(nil, /adapter: false/) do
444
- controller.get_serializer(Profile.new)
445
- end
446
- end
447
-
448
- def test_dont_warn_overridding_use_adapter_as_truthy_on_controller_instance
449
- controller = Class.new(ImplicitSerializationTestController) do
450
- def use_adapter?
451
- true
452
- end
453
- end.new
454
- assert_output(nil, '') do
455
- controller.get_serializer(Profile.new)
456
- end
457
- end
458
-
459
- def test_render_event_is_emitted
460
- subscriber = ::ActiveSupport::Notifications.subscribe('render.active_model_serializers') do |name|
461
- @name = name
462
- end
463
-
464
- get :render_using_implicit_serializer
465
-
466
- assert_equal 'render.active_model_serializers', @name
467
- ensure
468
- ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
469
- end
470
- end
471
- end
472
- end
@@ -1,208 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- class AdapterForTest < ::ActiveSupport::TestCase
5
- UnknownAdapterError = ::ActiveModelSerializers::Adapter::UnknownAdapterError
6
-
7
- def test_serializer_adapter_returns_configured_adapter
8
- assert_output(nil, /ActiveModelSerializers::Adapter.configured_adapter/) do
9
- assert_equal ActiveModelSerializers::Adapter.configured_adapter, ActiveModel::Serializer.adapter
10
- end
11
- end
12
-
13
- def test_returns_default_adapter
14
- with_adapter_config_setup do
15
- adapter = ActiveModelSerializers::Adapter.configured_adapter
16
- assert_equal ActiveModelSerializers::Adapter::Attributes, adapter
17
- end
18
- end
19
-
20
- def test_overwrite_adapter_with_symbol
21
- with_adapter_config_setup do
22
- ActiveModelSerializers.config.adapter = :null
23
-
24
- adapter = ActiveModelSerializers::Adapter.configured_adapter
25
- assert_equal ActiveModelSerializers::Adapter::Null, adapter
26
- end
27
- end
28
-
29
- def test_overwrite_adapter_with_camelcased_symbol
30
- with_adapter_config_setup do
31
- ActiveModelSerializers.config.adapter = :JsonApi
32
-
33
- adapter = ActiveModelSerializers::Adapter.configured_adapter
34
- assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
35
- end
36
- end
37
-
38
- def test_overwrite_adapter_with_string
39
- with_adapter_config_setup do
40
- ActiveModelSerializers.config.adapter = 'json_api'
41
-
42
- adapter = ActiveModelSerializers::Adapter.configured_adapter
43
- assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
44
- end
45
- end
46
-
47
- def test_overwrite_adapter_with_a_camelcased_string
48
- with_adapter_config_setup do
49
- ActiveModelSerializers.config.adapter = 'JsonApi'
50
-
51
- adapter = ActiveModelSerializers::Adapter.configured_adapter
52
- assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
53
- end
54
- end
55
-
56
- def test_overwrite_adapter_with_class
57
- with_adapter_config_setup do
58
- ActiveModelSerializers.config.adapter = ActiveModelSerializers::Adapter::Null
59
-
60
- adapter = ActiveModelSerializers::Adapter.configured_adapter
61
- assert_equal ActiveModelSerializers::Adapter::Null, adapter
62
- end
63
- end
64
-
65
- def test_raises_exception_if_invalid_symbol_given
66
- with_adapter_config_setup do
67
- ActiveModelSerializers.config.adapter = :unknown
68
-
69
- assert_raises UnknownAdapterError do
70
- ActiveModelSerializers::Adapter.configured_adapter
71
- end
72
- end
73
- end
74
-
75
- def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter
76
- with_adapter_config_setup do
77
- ActiveModelSerializers.config.adapter = 42
78
-
79
- assert_raises UnknownAdapterError do
80
- ActiveModelSerializers::Adapter.configured_adapter
81
- end
82
- end
83
- end
84
-
85
- def test_adapter_class_for_known_adapter
86
- klass = ActiveModelSerializers::Adapter.adapter_class(:json_api)
87
- assert_equal ActiveModelSerializers::Adapter::JsonApi, klass
88
- end
89
-
90
- def test_adapter_class_for_unknown_adapter
91
- assert_raises UnknownAdapterError do
92
- ActiveModelSerializers::Adapter.adapter_class(:json_simple)
93
- end
94
- end
95
-
96
- def test_adapter_map
97
- expected_adapter_map = {
98
- 'null'.freeze => ActiveModelSerializers::Adapter::Null,
99
- 'json'.freeze => ActiveModelSerializers::Adapter::Json,
100
- 'attributes'.freeze => ActiveModelSerializers::Adapter::Attributes,
101
- 'json_api'.freeze => ActiveModelSerializers::Adapter::JsonApi
102
- }
103
- actual = ActiveModelSerializers::Adapter.adapter_map
104
- assert_equal actual, expected_adapter_map
105
- end
106
-
107
- def test_adapters
108
- assert_equal ActiveModelSerializers::Adapter.adapters.sort, [
109
- 'attributes'.freeze,
110
- 'json'.freeze,
111
- 'json_api'.freeze,
112
- 'null'.freeze
113
- ]
114
- end
115
-
116
- def test_lookup_adapter_by_string_name
117
- assert_equal ActiveModelSerializers::Adapter.lookup('json'.freeze), ActiveModelSerializers::Adapter::Json
118
- end
119
-
120
- def test_lookup_adapter_by_symbol_name
121
- assert_equal ActiveModelSerializers::Adapter.lookup(:json), ActiveModelSerializers::Adapter::Json
122
- end
123
-
124
- def test_lookup_adapter_by_class
125
- klass = ActiveModelSerializers::Adapter::Json
126
- assert_equal ActiveModelSerializers::Adapter.lookup(klass), klass
127
- end
128
-
129
- def test_lookup_adapter_from_environment_registers_adapter
130
- ActiveModelSerializers::Adapter.const_set(:AdapterFromEnvironment, Class.new)
131
- klass = ::ActiveModelSerializers::Adapter::AdapterFromEnvironment
132
- name = 'adapter_from_environment'.freeze
133
- assert_equal ActiveModelSerializers::Adapter.lookup(name), klass
134
- assert ActiveModelSerializers::Adapter.adapters.include?(name)
135
- ensure
136
- ActiveModelSerializers::Adapter.adapter_map.delete(name)
137
- ActiveModelSerializers::Adapter.send(:remove_const, :AdapterFromEnvironment)
138
- end
139
-
140
- def test_lookup_adapter_for_unknown_name
141
- assert_raises UnknownAdapterError do
142
- ActiveModelSerializers::Adapter.lookup(:json_simple)
143
- end
144
- end
145
-
146
- def test_adapter
147
- assert_equal ActiveModelSerializers.config.adapter, :attributes
148
- assert_equal ActiveModelSerializers::Adapter.configured_adapter, ActiveModelSerializers::Adapter::Attributes
149
- end
150
-
151
- def test_register_adapter
152
- new_adapter_name = :foo
153
- new_adapter_klass = Class.new
154
- ActiveModelSerializers::Adapter.register(new_adapter_name, new_adapter_klass)
155
- assert ActiveModelSerializers::Adapter.adapters.include?('foo'.freeze)
156
- assert ActiveModelSerializers::Adapter.lookup(:foo), new_adapter_klass
157
- ensure
158
- ActiveModelSerializers::Adapter.adapter_map.delete(new_adapter_name.to_s)
159
- end
160
-
161
- def test_inherited_adapter_hooks_register_adapter
162
- Object.const_set(:MyAdapter, Class.new)
163
- my_adapter = MyAdapter
164
- ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
165
- assert_equal ActiveModelSerializers::Adapter.lookup(:my_adapter), my_adapter
166
- ensure
167
- ActiveModelSerializers::Adapter.adapter_map.delete('my_adapter'.freeze)
168
- Object.send(:remove_const, :MyAdapter)
169
- end
170
-
171
- def test_inherited_adapter_hooks_register_namespaced_adapter
172
- Object.const_set(:MyNamespace, Module.new)
173
- MyNamespace.const_set(:MyAdapter, Class.new)
174
- my_adapter = MyNamespace::MyAdapter
175
- ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
176
- assert_equal ActiveModelSerializers::Adapter.lookup(:'my_namespace/my_adapter'), my_adapter
177
- ensure
178
- ActiveModelSerializers::Adapter.adapter_map.delete('my_namespace/my_adapter'.freeze)
179
- MyNamespace.send(:remove_const, :MyAdapter)
180
- Object.send(:remove_const, :MyNamespace)
181
- end
182
-
183
- def test_inherited_adapter_hooks_register_subclass_of_registered_adapter
184
- Object.const_set(:MyAdapter, Class.new)
185
- my_adapter = MyAdapter
186
- Object.const_set(:MySubclassedAdapter, Class.new(MyAdapter))
187
- my_subclassed_adapter = MySubclassedAdapter
188
- ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
189
- ActiveModelSerializers::Adapter::Base.inherited(my_subclassed_adapter)
190
- assert_equal ActiveModelSerializers::Adapter.lookup(:my_adapter), my_adapter
191
- assert_equal ActiveModelSerializers::Adapter.lookup(:my_subclassed_adapter), my_subclassed_adapter
192
- ensure
193
- ActiveModelSerializers::Adapter.adapter_map.delete('my_adapter'.freeze)
194
- ActiveModelSerializers::Adapter.adapter_map.delete('my_subclassed_adapter'.freeze)
195
- Object.send(:remove_const, :MyAdapter)
196
- Object.send(:remove_const, :MySubclassedAdapter)
197
- end
198
-
199
- private
200
-
201
- def with_adapter_config_setup
202
- previous_adapter = ActiveModelSerializers.config.adapter
203
- yield
204
- ensure
205
- ActiveModelSerializers.config.adapter = previous_adapter
206
- end
207
- end
208
- end
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- class JsonPointerTest < ActiveSupport::TestCase
5
- def test_attribute_pointer
6
- attribute_name = 'title'
7
- pointer = ActiveModelSerializers::JsonPointer.new(:attribute, attribute_name)
8
- assert_equal '/data/attributes/title', pointer
9
- end
10
-
11
- def test_primary_data_pointer
12
- pointer = ActiveModelSerializers::JsonPointer.new(:primary_data)
13
- assert_equal '/data', pointer
14
- end
15
-
16
- def test_unknown_data_pointer
17
- assert_raises(TypeError) do
18
- ActiveModelSerializers::JsonPointer.new(:unknown)
19
- end
20
- end
21
- end
22
- end