agi_active_model_serializers 0.10.7
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.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE.md +29 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +15 -0
- data/.gitignore +35 -0
- data/.rubocop.yml +102 -0
- data/.simplecov +110 -0
- data/.travis.yml +51 -0
- data/CHANGELOG.md +612 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +105 -0
- data/Gemfile +56 -0
- data/MIT-LICENSE +22 -0
- data/README.md +307 -0
- data/Rakefile +103 -0
- data/active_model_serializers.gemspec +63 -0
- data/appveyor.yml +24 -0
- data/bin/bench +171 -0
- data/bin/bench_regression +316 -0
- data/bin/serve_benchmark +39 -0
- data/docs/README.md +41 -0
- data/docs/STYLE.md +58 -0
- data/docs/general/adapters.md +247 -0
- data/docs/general/caching.md +58 -0
- data/docs/general/configuration_options.md +169 -0
- data/docs/general/deserialization.md +100 -0
- data/docs/general/fields.md +31 -0
- data/docs/general/getting_started.md +133 -0
- data/docs/general/instrumentation.md +40 -0
- data/docs/general/key_transforms.md +40 -0
- data/docs/general/logging.md +14 -0
- data/docs/general/rendering.md +279 -0
- data/docs/general/serializers.md +461 -0
- data/docs/how-open-source-maintained.jpg +0 -0
- data/docs/howto/add_pagination_links.md +138 -0
- data/docs/howto/add_relationship_links.md +137 -0
- data/docs/howto/add_root_key.md +55 -0
- data/docs/howto/grape_integration.md +42 -0
- data/docs/howto/outside_controller_use.md +65 -0
- data/docs/howto/passing_arbitrary_options.md +27 -0
- data/docs/howto/serialize_poro.md +32 -0
- data/docs/howto/test.md +154 -0
- data/docs/howto/upgrade_from_0_8_to_0_10.md +265 -0
- data/docs/integrations/ember-and-json-api.md +144 -0
- data/docs/integrations/grape.md +19 -0
- data/docs/jsonapi/errors.md +56 -0
- data/docs/jsonapi/schema.md +151 -0
- data/docs/jsonapi/schema/schema.json +366 -0
- data/docs/rfcs/0000-namespace.md +106 -0
- data/docs/rfcs/template.md +15 -0
- data/lib/action_controller/serialization.rb +66 -0
- data/lib/active_model/serializable_resource.rb +11 -0
- data/lib/active_model/serializer.rb +231 -0
- data/lib/active_model/serializer/adapter.rb +24 -0
- data/lib/active_model/serializer/adapter/attributes.rb +15 -0
- data/lib/active_model/serializer/adapter/base.rb +18 -0
- data/lib/active_model/serializer/adapter/json.rb +15 -0
- data/lib/active_model/serializer/adapter/json_api.rb +15 -0
- data/lib/active_model/serializer/adapter/null.rb +15 -0
- data/lib/active_model/serializer/array_serializer.rb +12 -0
- data/lib/active_model/serializer/association.rb +34 -0
- data/lib/active_model/serializer/attribute.rb +25 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +7 -0
- data/lib/active_model/serializer/collection_reflection.rb +7 -0
- data/lib/active_model/serializer/collection_serializer.rb +87 -0
- data/lib/active_model/serializer/concerns/associations.rb +102 -0
- data/lib/active_model/serializer/concerns/attributes.rb +82 -0
- data/lib/active_model/serializer/concerns/caching.rb +292 -0
- data/lib/active_model/serializer/concerns/configuration.rb +59 -0
- data/lib/active_model/serializer/concerns/links.rb +35 -0
- data/lib/active_model/serializer/concerns/meta.rb +29 -0
- data/lib/active_model/serializer/concerns/type.rb +25 -0
- data/lib/active_model/serializer/error_serializer.rb +14 -0
- data/lib/active_model/serializer/errors_serializer.rb +32 -0
- data/lib/active_model/serializer/field.rb +90 -0
- data/lib/active_model/serializer/fieldset.rb +31 -0
- data/lib/active_model/serializer/has_many_reflection.rb +7 -0
- data/lib/active_model/serializer/has_one_reflection.rb +7 -0
- data/lib/active_model/serializer/lint.rb +150 -0
- data/lib/active_model/serializer/null.rb +17 -0
- data/lib/active_model/serializer/reflection.rb +163 -0
- data/lib/active_model/serializer/singular_reflection.rb +7 -0
- data/lib/active_model/serializer/version.rb +5 -0
- data/lib/active_model_serializers.rb +53 -0
- data/lib/active_model_serializers/adapter.rb +98 -0
- data/lib/active_model_serializers/adapter/attributes.rb +13 -0
- data/lib/active_model_serializers/adapter/base.rb +83 -0
- data/lib/active_model_serializers/adapter/json.rb +21 -0
- data/lib/active_model_serializers/adapter/json_api.rb +517 -0
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +213 -0
- data/lib/active_model_serializers/adapter/json_api/error.rb +96 -0
- data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +49 -0
- data/lib/active_model_serializers/adapter/json_api/link.rb +83 -0
- data/lib/active_model_serializers/adapter/json_api/meta.rb +37 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +69 -0
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +63 -0
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +51 -0
- data/lib/active_model_serializers/adapter/null.rb +9 -0
- data/lib/active_model_serializers/callbacks.rb +55 -0
- data/lib/active_model_serializers/deprecate.rb +54 -0
- data/lib/active_model_serializers/deserialization.rb +15 -0
- data/lib/active_model_serializers/json_pointer.rb +14 -0
- data/lib/active_model_serializers/logging.rb +122 -0
- data/lib/active_model_serializers/lookup_chain.rb +80 -0
- data/lib/active_model_serializers/model.rb +71 -0
- data/lib/active_model_serializers/railtie.rb +48 -0
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +78 -0
- data/lib/active_model_serializers/serializable_resource.rb +82 -0
- data/lib/active_model_serializers/serialization_context.rb +39 -0
- data/lib/active_model_serializers/test.rb +7 -0
- data/lib/active_model_serializers/test/schema.rb +138 -0
- data/lib/active_model_serializers/test/serializer.rb +125 -0
- data/lib/generators/rails/USAGE +6 -0
- data/lib/generators/rails/resource_override.rb +10 -0
- data/lib/generators/rails/serializer_generator.rb +36 -0
- data/lib/generators/rails/templates/serializer.rb.erb +15 -0
- data/lib/grape/active_model_serializers.rb +16 -0
- data/lib/grape/formatters/active_model_serializers.rb +32 -0
- data/lib/grape/helpers/active_model_serializers.rb +17 -0
- data/test/action_controller/adapter_selector_test.rb +53 -0
- data/test/action_controller/explicit_serializer_test.rb +135 -0
- data/test/action_controller/json/include_test.rb +246 -0
- data/test/action_controller/json_api/deserialization_test.rb +112 -0
- data/test/action_controller/json_api/errors_test.rb +40 -0
- data/test/action_controller/json_api/fields_test.rb +66 -0
- data/test/action_controller/json_api/linked_test.rb +202 -0
- data/test/action_controller/json_api/pagination_test.rb +116 -0
- data/test/action_controller/json_api/transform_test.rb +189 -0
- data/test/action_controller/lookup_proc_test.rb +49 -0
- data/test/action_controller/namespace_lookup_test.rb +232 -0
- data/test/action_controller/serialization_scope_name_test.rb +229 -0
- data/test/action_controller/serialization_test.rb +472 -0
- data/test/active_model_serializers/adapter_for_test.rb +208 -0
- data/test/active_model_serializers/json_pointer_test.rb +22 -0
- data/test/active_model_serializers/logging_test.rb +77 -0
- data/test/active_model_serializers/model_test.rb +69 -0
- data/test/active_model_serializers/railtie_test_isolated.rb +63 -0
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +161 -0
- data/test/active_model_serializers/serialization_context_test_isolated.rb +71 -0
- data/test/active_model_serializers/test/schema_test.rb +131 -0
- data/test/active_model_serializers/test/serializer_test.rb +62 -0
- data/test/active_record_test.rb +9 -0
- data/test/adapter/attributes_test.rb +43 -0
- data/test/adapter/deprecation_test.rb +100 -0
- data/test/adapter/json/belongs_to_test.rb +45 -0
- data/test/adapter/json/collection_test.rb +104 -0
- data/test/adapter/json/has_many_test.rb +45 -0
- data/test/adapter/json/transform_test.rb +93 -0
- data/test/adapter/json_api/belongs_to_test.rb +155 -0
- data/test/adapter/json_api/collection_test.rb +96 -0
- data/test/adapter/json_api/errors_test.rb +76 -0
- data/test/adapter/json_api/fields_test.rb +96 -0
- data/test/adapter/json_api/has_many_embed_ids_test.rb +43 -0
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +96 -0
- data/test/adapter/json_api/has_many_test.rb +165 -0
- data/test/adapter/json_api/has_one_test.rb +80 -0
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +168 -0
- data/test/adapter/json_api/json_api_test.rb +33 -0
- data/test/adapter/json_api/linked_test.rb +413 -0
- data/test/adapter/json_api/links_test.rb +95 -0
- data/test/adapter/json_api/pagination_links_test.rb +193 -0
- data/test/adapter/json_api/parse_test.rb +137 -0
- data/test/adapter/json_api/relationship_test.rb +397 -0
- data/test/adapter/json_api/resource_identifier_test.rb +110 -0
- data/test/adapter/json_api/resource_meta_test.rb +100 -0
- data/test/adapter/json_api/toplevel_jsonapi_test.rb +82 -0
- data/test/adapter/json_api/transform_test.rb +512 -0
- data/test/adapter/json_api/type_test.rb +61 -0
- data/test/adapter/json_test.rb +46 -0
- data/test/adapter/null_test.rb +22 -0
- data/test/adapter/polymorphic_test.rb +171 -0
- data/test/adapter_test.rb +67 -0
- data/test/array_serializer_test.rb +22 -0
- data/test/benchmark/app.rb +65 -0
- data/test/benchmark/benchmarking_support.rb +67 -0
- data/test/benchmark/bm_active_record.rb +81 -0
- data/test/benchmark/bm_adapter.rb +38 -0
- data/test/benchmark/bm_caching.rb +119 -0
- data/test/benchmark/bm_lookup_chain.rb +83 -0
- data/test/benchmark/bm_transform.rb +45 -0
- data/test/benchmark/config.ru +3 -0
- data/test/benchmark/controllers.rb +83 -0
- data/test/benchmark/fixtures.rb +219 -0
- data/test/cache_test.rb +595 -0
- data/test/collection_serializer_test.rb +123 -0
- data/test/fixtures/active_record.rb +113 -0
- data/test/fixtures/poro.rb +232 -0
- data/test/generators/scaffold_controller_generator_test.rb +24 -0
- data/test/generators/serializer_generator_test.rb +74 -0
- data/test/grape_test.rb +178 -0
- data/test/lint_test.rb +49 -0
- data/test/logger_test.rb +20 -0
- data/test/poro_test.rb +9 -0
- data/test/serializable_resource_test.rb +79 -0
- data/test/serializers/association_macros_test.rb +37 -0
- data/test/serializers/associations_test.rb +383 -0
- data/test/serializers/attribute_test.rb +153 -0
- data/test/serializers/attributes_test.rb +52 -0
- data/test/serializers/caching_configuration_test_isolated.rb +170 -0
- data/test/serializers/configuration_test.rb +32 -0
- data/test/serializers/fieldset_test.rb +14 -0
- data/test/serializers/meta_test.rb +202 -0
- data/test/serializers/options_test.rb +32 -0
- data/test/serializers/read_attribute_for_serialization_test.rb +79 -0
- data/test/serializers/root_test.rb +21 -0
- data/test/serializers/serialization_test.rb +55 -0
- data/test/serializers/serializer_for_test.rb +136 -0
- data/test/serializers/serializer_for_with_namespace_test.rb +88 -0
- data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +6 -0
- data/test/support/isolated_unit.rb +82 -0
- data/test/support/rails5_shims.rb +53 -0
- data/test/support/rails_app.rb +36 -0
- data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +6 -0
- data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +6 -0
- data/test/support/schemas/custom/show.json +7 -0
- data/test/support/schemas/hyper_schema.json +93 -0
- data/test/support/schemas/render_using_json_api.json +43 -0
- data/test/support/schemas/simple_json_pointers.json +10 -0
- data/test/support/serialization_testing.rb +71 -0
- data/test/test_helper.rb +58 -0
- metadata +602 -0
|
@@ -0,0 +1,71 @@
|
|
|
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
|
|
@@ -0,0 +1,131 @@
|
|
|
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
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module ActiveModelSerializers
|
|
4
|
+
module Adapter
|
|
5
|
+
class AttributesTest < ActiveSupport::TestCase
|
|
6
|
+
class Person
|
|
7
|
+
include ActiveModel::Model
|
|
8
|
+
include ActiveModel::Serialization
|
|
9
|
+
|
|
10
|
+
attr_accessor :first_name, :last_name
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class PersonSerializer < ActiveModel::Serializer
|
|
14
|
+
attributes :first_name, :last_name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def setup
|
|
18
|
+
ActionController::Base.cache_store.clear
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_serializable_hash
|
|
22
|
+
person = Person.new(first_name: 'Arthur', last_name: 'Dent')
|
|
23
|
+
serializer = PersonSerializer.new(person)
|
|
24
|
+
adapter = ActiveModelSerializers::Adapter::Attributes.new(serializer)
|
|
25
|
+
|
|
26
|
+
assert_equal({ first_name: 'Arthur', last_name: 'Dent' },
|
|
27
|
+
adapter.serializable_hash)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_serializable_hash_with_transform_key_casing
|
|
31
|
+
person = Person.new(first_name: 'Arthur', last_name: 'Dent')
|
|
32
|
+
serializer = PersonSerializer.new(person)
|
|
33
|
+
adapter = ActiveModelSerializers::Adapter::Attributes.new(
|
|
34
|
+
serializer,
|
|
35
|
+
key_transform: :camel_lower
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
assert_equal({ firstName: 'Arthur', lastName: 'Dent' },
|
|
39
|
+
adapter.serializable_hash)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
module ActiveModel
|
|
3
|
+
class Serializer
|
|
4
|
+
module Adapter
|
|
5
|
+
class DeprecationTest < ActiveSupport::TestCase
|
|
6
|
+
class PostSerializer < ActiveModel::Serializer
|
|
7
|
+
attribute :body
|
|
8
|
+
end
|
|
9
|
+
setup do
|
|
10
|
+
post = Post.new(id: 1, body: 'Hello')
|
|
11
|
+
@serializer = PostSerializer.new(post)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_null_adapter_serialization_deprecation
|
|
15
|
+
expected = {}
|
|
16
|
+
assert_deprecated do
|
|
17
|
+
assert_equal(expected, Null.new(@serializer).as_json)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_json_adapter_serialization_deprecation
|
|
22
|
+
expected = { post: { body: 'Hello' } }
|
|
23
|
+
assert_deprecated do
|
|
24
|
+
assert_equal(expected, Json.new(@serializer).as_json)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_jsonapi_adapter_serialization_deprecation
|
|
29
|
+
expected = {
|
|
30
|
+
data: {
|
|
31
|
+
id: '1',
|
|
32
|
+
type: 'posts',
|
|
33
|
+
attributes: {
|
|
34
|
+
body: 'Hello'
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
assert_deprecated do
|
|
39
|
+
assert_equal(expected, JsonApi.new(@serializer).as_json)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_attributes_adapter_serialization_deprecation
|
|
44
|
+
expected = { body: 'Hello' }
|
|
45
|
+
assert_deprecated do
|
|
46
|
+
assert_equal(expected, Attributes.new(@serializer).as_json)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_adapter_create_deprecation
|
|
51
|
+
assert_deprecated do
|
|
52
|
+
Adapter.create(@serializer)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_adapter_adapter_map_deprecation
|
|
57
|
+
assert_deprecated do
|
|
58
|
+
Adapter.adapter_map
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_adapter_adapters_deprecation
|
|
63
|
+
assert_deprecated do
|
|
64
|
+
Adapter.adapters
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_adapter_adapter_class_deprecation
|
|
69
|
+
assert_deprecated do
|
|
70
|
+
Adapter.adapter_class(:json_api)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_adapter_register_deprecation
|
|
75
|
+
assert_deprecated do
|
|
76
|
+
begin
|
|
77
|
+
Adapter.register(:test, Class.new)
|
|
78
|
+
ensure
|
|
79
|
+
Adapter.adapter_map.delete('test')
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_adapter_lookup_deprecation
|
|
85
|
+
assert_deprecated do
|
|
86
|
+
Adapter.lookup(:json_api)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def assert_deprecated
|
|
93
|
+
assert_output(nil, /deprecated/) do
|
|
94
|
+
yield
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module ActiveModelSerializers
|
|
4
|
+
module Adapter
|
|
5
|
+
class Json
|
|
6
|
+
class BelongsToTest < ActiveSupport::TestCase
|
|
7
|
+
def setup
|
|
8
|
+
@post = Post.new(id: 42, title: 'New Post', body: 'Body')
|
|
9
|
+
@anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!')
|
|
10
|
+
@comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
|
11
|
+
@post.comments = [@comment]
|
|
12
|
+
@anonymous_post.comments = []
|
|
13
|
+
@comment.post = @post
|
|
14
|
+
@comment.author = nil
|
|
15
|
+
@anonymous_post.author = nil
|
|
16
|
+
@blog = Blog.new(id: 1, name: 'My Blog!!')
|
|
17
|
+
@post.blog = @blog
|
|
18
|
+
@anonymous_post.blog = nil
|
|
19
|
+
|
|
20
|
+
@serializer = CommentSerializer.new(@comment)
|
|
21
|
+
@adapter = ActiveModelSerializers::Adapter::Json.new(@serializer)
|
|
22
|
+
ActionController::Base.cache_store.clear
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_includes_post
|
|
26
|
+
assert_equal({ id: 42, title: 'New Post', body: 'Body' }, @adapter.serializable_hash[:comment][:post])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_include_nil_author
|
|
30
|
+
serializer = PostSerializer.new(@anonymous_post)
|
|
31
|
+
adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
|
|
32
|
+
|
|
33
|
+
assert_equal({ post: { title: 'Hello!!', body: 'Hello, world!!', id: 43, comments: [], blog: { id: 999, name: 'Custom blog' }, author: nil } }, adapter.serializable_hash)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_include_nil_author_with_specified_serializer
|
|
37
|
+
serializer = PostPreviewSerializer.new(@anonymous_post)
|
|
38
|
+
adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
|
|
39
|
+
|
|
40
|
+
assert_equal({ post: { title: 'Hello!!', body: 'Hello, world!!', id: 43, comments: [], author: nil } }, adapter.serializable_hash)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|