active_model_serializers 0.10.7 → 0.10.12

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 (213) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +62 -1
  3. data/README.md +20 -20
  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.rb +33 -18
  7. data/lib/active_model/serializer/adapter.rb +2 -0
  8. data/lib/active_model/serializer/adapter/attributes.rb +2 -0
  9. data/lib/active_model/serializer/adapter/base.rb +2 -0
  10. data/lib/active_model/serializer/adapter/json.rb +2 -0
  11. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  12. data/lib/active_model/serializer/adapter/null.rb +2 -0
  13. data/lib/active_model/serializer/array_serializer.rb +2 -0
  14. data/lib/active_model/serializer/association.rb +2 -0
  15. data/lib/active_model/serializer/attribute.rb +2 -0
  16. data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
  17. data/lib/active_model/serializer/collection_serializer.rb +6 -6
  18. data/lib/active_model/serializer/concerns/caching.rb +7 -2
  19. data/lib/active_model/serializer/error_serializer.rb +2 -0
  20. data/lib/active_model/serializer/errors_serializer.rb +2 -0
  21. data/lib/active_model/serializer/field.rb +2 -0
  22. data/lib/active_model/serializer/fieldset.rb +3 -1
  23. data/lib/active_model/serializer/has_many_reflection.rb +2 -0
  24. data/lib/active_model/serializer/has_one_reflection.rb +2 -0
  25. data/lib/active_model/serializer/lazy_association.rb +6 -2
  26. data/lib/active_model/serializer/link.rb +23 -0
  27. data/lib/active_model/serializer/lint.rb +2 -0
  28. data/lib/active_model/serializer/null.rb +2 -0
  29. data/lib/active_model/serializer/reflection.rb +9 -4
  30. data/lib/active_model/serializer/version.rb +3 -1
  31. data/lib/active_model_serializers.rb +20 -10
  32. data/lib/active_model_serializers/adapter.rb +3 -1
  33. data/lib/active_model_serializers/adapter/attributes.rb +23 -0
  34. data/lib/active_model_serializers/adapter/base.rb +2 -0
  35. data/lib/active_model_serializers/adapter/json.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api.rb +14 -9
  37. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +2 -0
  38. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  39. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  40. data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
  41. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  42. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +2 -0
  43. data/lib/active_model_serializers/adapter/json_api/relationship.rb +2 -0
  44. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +3 -1
  45. data/lib/active_model_serializers/adapter/null.rb +2 -0
  46. data/lib/active_model_serializers/callbacks.rb +2 -0
  47. data/lib/active_model_serializers/deprecate.rb +2 -0
  48. data/lib/active_model_serializers/deserialization.rb +2 -0
  49. data/lib/active_model_serializers/json_pointer.rb +2 -0
  50. data/lib/active_model_serializers/logging.rb +2 -0
  51. data/lib/active_model_serializers/lookup_chain.rb +2 -0
  52. data/lib/active_model_serializers/model.rb +2 -0
  53. data/lib/active_model_serializers/model/caching.rb +25 -0
  54. data/lib/active_model_serializers/railtie.rb +4 -0
  55. data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
  56. data/lib/active_model_serializers/serializable_resource.rb +4 -2
  57. data/lib/active_model_serializers/serialization_context.rb +2 -0
  58. data/lib/active_model_serializers/test.rb +2 -0
  59. data/lib/active_model_serializers/test/schema.rb +2 -0
  60. data/lib/active_model_serializers/test/serializer.rb +2 -0
  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 +70 -295
  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 -52
  74. data/CODE_OF_CONDUCT.md +0 -74
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -72
  77. data/Rakefile +0 -74
  78. data/active_model_serializers.gemspec +0 -63
  79. data/appveyor.yml +0 -28
  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 -269
  87. data/docs/general/caching.md +0 -58
  88. data/docs/general/configuration_options.md +0 -185
  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 -483
  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 -62
  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.md +0 -151
  111. data/docs/jsonapi/schema/schema.json +0 -366
  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 -124
  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_explicit_serializer_test.rb +0 -96
  148. data/test/adapter/json_api/has_many_test.rb +0 -173
  149. data/test/adapter/json_api/has_one_test.rb +0 -80
  150. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -213
  151. data/test/adapter/json_api/json_api_test.rb +0 -33
  152. data/test/adapter/json_api/linked_test.rb +0 -413
  153. data/test/adapter/json_api/links_test.rb +0 -95
  154. data/test/adapter/json_api/pagination_links_test.rb +0 -206
  155. data/test/adapter/json_api/parse_test.rb +0 -137
  156. data/test/adapter/json_api/relationship_test.rb +0 -397
  157. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  158. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  159. data/test/adapter/json_api/transform_test.rb +0 -512
  160. data/test/adapter/json_api/type_test.rb +0 -193
  161. data/test/adapter/json_test.rb +0 -46
  162. data/test/adapter/null_test.rb +0 -22
  163. data/test/adapter/polymorphic_test.rb +0 -218
  164. data/test/adapter_test.rb +0 -67
  165. data/test/array_serializer_test.rb +0 -22
  166. data/test/benchmark/app.rb +0 -65
  167. data/test/benchmark/benchmarking_support.rb +0 -67
  168. data/test/benchmark/bm_active_record.rb +0 -81
  169. data/test/benchmark/bm_adapter.rb +0 -38
  170. data/test/benchmark/bm_caching.rb +0 -119
  171. data/test/benchmark/bm_lookup_chain.rb +0 -83
  172. data/test/benchmark/bm_transform.rb +0 -45
  173. data/test/benchmark/config.ru +0 -3
  174. data/test/benchmark/controllers.rb +0 -83
  175. data/test/benchmark/fixtures.rb +0 -219
  176. data/test/cache_test.rb +0 -651
  177. data/test/collection_serializer_test.rb +0 -127
  178. data/test/fixtures/active_record.rb +0 -113
  179. data/test/fixtures/poro.rb +0 -225
  180. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  181. data/test/generators/serializer_generator_test.rb +0 -75
  182. data/test/grape_test.rb +0 -196
  183. data/test/lint_test.rb +0 -49
  184. data/test/logger_test.rb +0 -20
  185. data/test/poro_test.rb +0 -9
  186. data/test/serializable_resource_test.rb +0 -79
  187. data/test/serializers/association_macros_test.rb +0 -37
  188. data/test/serializers/associations_test.rb +0 -468
  189. data/test/serializers/attribute_test.rb +0 -153
  190. data/test/serializers/attributes_test.rb +0 -52
  191. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  192. data/test/serializers/configuration_test.rb +0 -32
  193. data/test/serializers/fieldset_test.rb +0 -14
  194. data/test/serializers/meta_test.rb +0 -202
  195. data/test/serializers/options_test.rb +0 -32
  196. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  197. data/test/serializers/reflection_test.rb +0 -427
  198. data/test/serializers/root_test.rb +0 -21
  199. data/test/serializers/serialization_test.rb +0 -55
  200. data/test/serializers/serializer_for_test.rb +0 -136
  201. data/test/serializers/serializer_for_with_namespace_test.rb +0 -88
  202. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  203. data/test/support/isolated_unit.rb +0 -84
  204. data/test/support/rails5_shims.rb +0 -53
  205. data/test/support/rails_app.rb +0 -38
  206. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  207. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  208. data/test/support/schemas/custom/show.json +0 -7
  209. data/test/support/schemas/hyper_schema.json +0 -93
  210. data/test/support/schemas/render_using_json_api.json +0 -43
  211. data/test/support/schemas/simple_json_pointers.json +0 -10
  212. data/test/support/serialization_testing.rb +0 -79
  213. data/test/test_helper.rb +0 -70
@@ -1,68 +0,0 @@
1
- # Execute this test in isolation
2
- require 'support/isolated_unit'
3
-
4
- class RailtieTest < ActiveSupport::TestCase
5
- include ActiveSupport::Testing::Isolation
6
-
7
- class WithRailsRequiredFirst < RailtieTest
8
- setup do
9
- require 'rails'
10
- require 'active_model_serializers'
11
- make_basic_app do |app|
12
- app.config.action_controller.perform_caching = true
13
- end
14
- end
15
-
16
- test 'mixes ActionController::Serialization into ActionController::Base' do
17
- assert ActionController.const_defined?(:Serialization),
18
- "ActionController::Serialization should be defined, but isn't"
19
- assert ::ActionController::Base.included_modules.include?(::ActionController::Serialization),
20
- "ActionController::Serialization should be included in ActionController::Base, but isn't"
21
- end
22
-
23
- test 'prepares url_helpers for SerializationContext' do
24
- assert ActiveModelSerializers::SerializationContext.url_helpers.respond_to? :url_for
25
- assert_equal Rails.application.routes.default_url_options,
26
- ActiveModelSerializers::SerializationContext.default_url_options
27
- end
28
-
29
- test 'sets the ActiveModelSerializers.logger to Rails.logger' do
30
- refute_nil Rails.logger
31
- refute_nil ActiveModelSerializers.logger
32
- assert_equal Rails.logger, ActiveModelSerializers.logger
33
- end
34
-
35
- test 'it is configured for caching' do
36
- assert_equal ActionController::Base.cache_store, ActiveModelSerializers.config.cache_store
37
- assert_equal true, Rails.configuration.action_controller.perform_caching
38
- assert_equal true, ActiveModelSerializers.config.perform_caching
39
- end
40
- end
41
-
42
- class WithoutRailsRequiredFirst < RailtieTest
43
- setup do
44
- require 'active_model_serializers'
45
- make_basic_app do |app|
46
- app.config.action_controller.perform_caching = true
47
- end
48
- end
49
-
50
- test 'does not mix ActionController::Serialization into ActionController::Base' do
51
- refute ActionController.const_defined?(:Serialization),
52
- 'ActionController::Serialization should not be defined, but is'
53
- end
54
-
55
- test 'has its own logger at ActiveModelSerializers.logger' do
56
- refute_nil Rails.logger
57
- refute_nil ActiveModelSerializers.logger
58
- refute_equal Rails.logger, ActiveModelSerializers.logger
59
- end
60
-
61
- test 'it is not configured for caching' do
62
- refute_nil ActionController::Base.cache_store
63
- assert_nil ActiveModelSerializers.config.cache_store
64
- assert_equal true, Rails.configuration.action_controller.perform_caching
65
- assert_nil ActiveModelSerializers.config.perform_caching
66
- end
67
- end
68
- end
@@ -1,161 +0,0 @@
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
- permitted_params = params.permit(data: [:id, :type, attributes: [:name]])
16
- permitted_params = permitted_params.to_h.with_indifferent_access
17
- attributes =
18
- if permitted_params[:data]
19
- permitted_params[:data][:attributes].merge(id: permitted_params[:data][:id])
20
- else
21
- # Rails returns empty params when no mime type can be negotiated.
22
- # (Until https://github.com/rails/rails/pull/26632 is reviewed.)
23
- permitted_params
24
- end
25
- author = Author.new(attributes)
26
- render jsonapi: author
27
- end
28
-
29
- def parse
30
- self.class.last_request_parameters = request.request_parameters
31
- head :ok
32
- end
33
- end
34
-
35
- def teardown
36
- TestController.last_request_parameters = nil
37
- end
38
-
39
- def assert_parses(expected, actual, headers = {})
40
- post '/parse', params: actual, headers: headers
41
- assert_response :ok
42
- assert_equal(expected, TestController.last_request_parameters)
43
- end
44
-
45
- def define_author_model_and_serializer
46
- TestController.const_set(:Author, Class.new(ActiveModelSerializers::Model) do
47
- attributes :id, :name
48
- end)
49
- TestController.const_set(:AuthorSerializer, Class.new(ActiveModel::Serializer) do
50
- type 'users'
51
- attribute :id
52
- attribute :name
53
- end)
54
- end
55
-
56
- class WithoutRenderer < JsonApiRendererTest
57
- setup do
58
- require 'rails'
59
- require 'active_record'
60
- require 'support/rails5_shims'
61
- require 'active_model_serializers'
62
- require 'fixtures/poro'
63
-
64
- make_basic_app
65
-
66
- Rails.application.routes.draw do
67
- ActiveSupport::Deprecation.silence do
68
- match ':action', to: TestController, via: [:get, :post]
69
- end
70
- end
71
- define_author_model_and_serializer
72
- end
73
-
74
- def test_jsonapi_parser_not_registered
75
- parsers = if Rails::VERSION::MAJOR >= 5
76
- ActionDispatch::Request.parameter_parsers
77
- else
78
- ActionDispatch::ParamsParser::DEFAULT_PARSERS
79
- end
80
- assert_nil parsers[Mime[:jsonapi]]
81
- end
82
-
83
- def test_jsonapi_renderer_not_registered
84
- payload = '{"data": {"attributes": {"name": "Johnny Rico"}, "type": "users", "id": "36c9c04e-86b1-4636-a5b0-8616672d1765"}}'
85
- headers = { 'CONTENT_TYPE' => 'application/vnd.api+json' }
86
- post '/render_with_jsonapi_renderer', params: payload, headers: headers
87
- assert_equal '', response.body
88
- assert_equal 500, response.status
89
- assert_equal ActionView::MissingTemplate, request.env['action_dispatch.exception'].class
90
- end
91
-
92
- def test_jsonapi_parser
93
- assert_parses(
94
- {},
95
- '',
96
- 'CONTENT_TYPE' => 'application/vnd.api+json'
97
- )
98
- end
99
- end
100
-
101
- class WithRenderer < JsonApiRendererTest
102
- setup do
103
- require 'rails'
104
- require 'active_record'
105
- require 'support/rails5_shims'
106
- require 'active_model_serializers'
107
- require 'fixtures/poro'
108
- require 'active_model_serializers/register_jsonapi_renderer'
109
-
110
- make_basic_app
111
-
112
- Rails.application.routes.draw do
113
- ActiveSupport::Deprecation.silence do
114
- match ':action', to: TestController, via: [:get, :post]
115
- end
116
- end
117
- define_author_model_and_serializer
118
- end
119
-
120
- def test_jsonapi_parser_registered
121
- if Rails::VERSION::MAJOR >= 5
122
- parsers = ActionDispatch::Request.parameter_parsers
123
- assert_equal Proc, parsers[:jsonapi].class
124
- else
125
- parsers = ActionDispatch::ParamsParser::DEFAULT_PARSERS
126
- assert_equal Proc, parsers[Mime[:jsonapi]].class
127
- end
128
- end
129
-
130
- def test_jsonapi_renderer_registered
131
- expected = {
132
- 'data' => {
133
- 'id' => '36c9c04e-86b1-4636-a5b0-8616672d1765',
134
- 'type' => 'users',
135
- 'attributes' => { 'name' => 'Johnny Rico' }
136
- }
137
- }
138
-
139
- payload = '{"data": {"attributes": {"name": "Johnny Rico"}, "type": "users", "id": "36c9c04e-86b1-4636-a5b0-8616672d1765"}}'
140
- headers = { 'CONTENT_TYPE' => 'application/vnd.api+json' }
141
- post '/render_with_jsonapi_renderer', params: payload, headers: headers
142
- assert_equal expected.to_json, response.body
143
- end
144
-
145
- def test_jsonapi_parser
146
- assert_parses(
147
- {
148
- 'data' => {
149
- 'attributes' => {
150
- 'name' => 'John Doe'
151
- },
152
- 'type' => 'users',
153
- 'id' => '36c9c04e-86b1-4636-a5b0-8616672d1765'
154
- }
155
- },
156
- '{"data": {"attributes": {"name": "John Doe"}, "type": "users", "id": "36c9c04e-86b1-4636-a5b0-8616672d1765"}}',
157
- 'CONTENT_TYPE' => 'application/vnd.api+json'
158
- )
159
- end
160
- end
161
- end
@@ -1,71 +0,0 @@
1
- # Execute this test in isolation
2
- require 'support/isolated_unit'
3
- require 'minitest/mock'
4
-
5
- class SerializationContextTest < ActiveSupport::TestCase
6
- include ActiveSupport::Testing::Isolation
7
-
8
- class WithRails < SerializationContextTest
9
- def create_request
10
- request = ActionDispatch::Request.new({})
11
- def request.original_url
12
- 'http://example.com/articles?page=2'
13
- end
14
-
15
- def request.query_parameters
16
- { 'page' => 2 }
17
- end
18
- request
19
- end
20
-
21
- setup do
22
- require 'rails'
23
- require 'active_model_serializers'
24
- make_basic_app
25
- @context = ActiveModelSerializers::SerializationContext.new(create_request)
26
- end
27
-
28
- test 'create context with request url and query parameters' do
29
- assert_equal @context.request_url, 'http://example.com/articles'
30
- assert_equal @context.query_parameters, 'page' => 2
31
- end
32
-
33
- test 'url_helpers is set up for Rails url_helpers' do
34
- assert_equal Module, ActiveModelSerializers::SerializationContext.url_helpers.class
35
- assert ActiveModelSerializers::SerializationContext.url_helpers.respond_to? :url_for
36
- end
37
-
38
- test 'default_url_options returns Rails.application.routes.default_url_options' do
39
- assert_equal Rails.application.routes.default_url_options,
40
- ActiveModelSerializers::SerializationContext.default_url_options
41
- end
42
- end
43
-
44
- class WithoutRails < SerializationContextTest
45
- def create_request
46
- {
47
- request_url: 'http://example.com/articles',
48
- query_parameters: { 'page' => 2 }
49
- }
50
- end
51
-
52
- setup do
53
- require 'active_model_serializers/serialization_context'
54
- @context = ActiveModelSerializers::SerializationContext.new(create_request)
55
- end
56
-
57
- test 'create context with request url and query parameters' do
58
- assert_equal @context.request_url, 'http://example.com/articles'
59
- assert_equal @context.query_parameters, 'page' => 2
60
- end
61
-
62
- test 'url_helpers is a module when Rails is not present' do
63
- assert_equal Module, ActiveModelSerializers::SerializationContext.url_helpers.class
64
- refute ActiveModelSerializers::SerializationContext.url_helpers.respond_to? :url_for
65
- end
66
-
67
- test 'default_url_options return a Hash' do
68
- assert Hash, ActiveModelSerializers::SerializationContext.default_url_options.class
69
- end
70
- end
71
- end
@@ -1,131 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Test
5
- class SchemaTest < ActionController::TestCase
6
- include ActiveModelSerializers::Test::Schema
7
-
8
- class MyController < ActionController::Base
9
- def index
10
- render json: profile
11
- end
12
-
13
- def show
14
- index
15
- end
16
-
17
- def name_as_a_integer
18
- profile.name = 1
19
- index
20
- end
21
-
22
- def render_using_json_api
23
- render json: profile, adapter: :json_api
24
- end
25
-
26
- def invalid_json_body
27
- render json: ''
28
- end
29
-
30
- private
31
-
32
- def profile
33
- @profile ||= Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
34
- end
35
- end
36
-
37
- tests MyController
38
-
39
- def test_that_assert_with_a_valid_schema
40
- get :index
41
- assert_response_schema
42
- end
43
-
44
- def test_that_raises_a_minitest_error_with_a_invalid_schema
45
- message = "#/name: failed schema #/properties/name: For 'properties/name', \"Name 1\" is not an integer. and #/description: failed schema #/properties/description: For 'properties/description', \"Description 1\" is not a boolean."
46
-
47
- get :show
48
-
49
- error = assert_raises Minitest::Assertion do
50
- assert_response_schema
51
- end
52
- assert_equal(message, error.message)
53
- end
54
-
55
- def test_that_raises_error_with_a_custom_message_with_a_invalid_schema
56
- message = 'oh boy the show is broken'
57
- exception_message = "#/name: failed schema #/properties/name: For 'properties/name', \"Name 1\" is not an integer. and #/description: failed schema #/properties/description: For 'properties/description', \"Description 1\" is not a boolean."
58
- expected_message = "#{message}: #{exception_message}"
59
-
60
- get :show
61
-
62
- error = assert_raises Minitest::Assertion do
63
- assert_response_schema(nil, message)
64
- end
65
- assert_equal(expected_message, error.message)
66
- end
67
-
68
- def test_that_assert_with_a_custom_schema
69
- get :show
70
- assert_response_schema('custom/show.json')
71
- end
72
-
73
- def test_that_assert_with_a_hyper_schema
74
- get :show
75
- assert_response_schema('hyper_schema.json')
76
- end
77
-
78
- def test_simple_json_pointers
79
- get :show
80
- assert_response_schema('simple_json_pointers.json')
81
- end
82
-
83
- def test_simple_json_pointers_that_doesnt_match
84
- get :name_as_a_integer
85
-
86
- assert_raises Minitest::Assertion do
87
- assert_response_schema('simple_json_pointers.json')
88
- end
89
- end
90
-
91
- def test_json_api_schema
92
- get :render_using_json_api
93
- assert_response_schema('render_using_json_api.json')
94
- end
95
-
96
- def test_that_assert_with_a_custom_schema_directory
97
- original_schema_path = ActiveModelSerializers.config.schema_path
98
- ActiveModelSerializers.config.schema_path = 'test/support/custom_schemas'
99
-
100
- get :index
101
- assert_response_schema
102
-
103
- ActiveModelSerializers.config.schema_path = original_schema_path
104
- end
105
-
106
- def test_with_a_non_existent_file
107
- message = 'No Schema file at test/support/schemas/non-existent.json'
108
-
109
- get :show
110
-
111
- error = assert_raises ActiveModelSerializers::Test::Schema::MissingSchema do
112
- assert_response_schema('non-existent.json')
113
- end
114
- assert_equal(message, error.message)
115
- end
116
-
117
- def test_that_raises_with_a_invalid_json_body
118
- # message changes from JSON gem 2.0.2 to 2.2.0
119
- message = /A JSON text must at least contain two octets!|unexpected token at ''/
120
-
121
- get :invalid_json_body
122
-
123
- error = assert_raises ActiveModelSerializers::Test::Schema::InvalidSchemaError do
124
- assert_response_schema('custom/show.json')
125
- end
126
-
127
- assert_match(message, error.message)
128
- end
129
- end
130
- end
131
- end
@@ -1,62 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Test
5
- class SerializerTest < ActionController::TestCase
6
- include ActiveModelSerializers::Test::Serializer
7
-
8
- class MyController < ActionController::Base
9
- def render_using_serializer
10
- render json: Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
11
- end
12
-
13
- def render_some_text
14
- render(plain: 'ok')
15
- end
16
- end
17
-
18
- tests MyController
19
-
20
- def test_supports_specifying_serializers_with_a_serializer_class
21
- get :render_using_serializer
22
- assert_serializer ProfileSerializer
23
- end
24
-
25
- def test_supports_specifying_serializers_with_a_regexp
26
- get :render_using_serializer
27
- assert_serializer(/\AProfile.+\Z/)
28
- end
29
-
30
- def test_supports_specifying_serializers_with_a_string
31
- get :render_using_serializer
32
- assert_serializer 'ProfileSerializer'
33
- end
34
-
35
- def test_supports_specifying_serializers_with_a_symbol
36
- get :render_using_serializer
37
- assert_serializer :profile_serializer
38
- end
39
-
40
- def test_supports_specifying_serializers_with_a_nil
41
- get :render_some_text
42
- assert_serializer nil
43
- end
44
-
45
- def test_raises_descriptive_error_message_when_serializer_was_not_rendered
46
- get :render_using_serializer
47
- e = assert_raise ActiveSupport::TestCase::Assertion do
48
- assert_serializer 'PostSerializer'
49
- end
50
- assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message
51
- end
52
-
53
- def test_raises_argument_error_when_asserting_with_invalid_object
54
- get :render_using_serializer
55
- e = assert_raise ArgumentError do
56
- assert_serializer Hash
57
- end
58
- assert_match 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil', e.message
59
- end
60
- end
61
- end
62
- end