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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +41 -2
- data/README.md +18 -19
- data/lib/action_controller/serialization.rb +9 -1
- data/lib/active_model/serializer/collection_serializer.rb +11 -2
- data/lib/active_model/serializer/concerns/caching.rb +2 -1
- data/lib/active_model/serializer/fieldset.rb +1 -1
- data/lib/active_model/serializer/reflection.rb +4 -4
- data/lib/active_model/serializer/version.rb +1 -1
- data/lib/active_model/serializer.rb +13 -4
- data/lib/active_model_serializers/adapter/attributes.rb +21 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +5 -1
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +1 -1
- data/lib/active_model_serializers/model/caching.rb +26 -0
- metadata +20 -292
- data/.github/ISSUE_TEMPLATE.md +0 -29
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
- data/.gitignore +0 -35
- data/.rubocop.yml +0 -109
- data/.simplecov +0 -110
- data/.travis.yml +0 -63
- data/CODE_OF_CONDUCT.md +0 -74
- data/CONTRIBUTING.md +0 -105
- data/Gemfile +0 -74
- data/Rakefile +0 -76
- data/active_model_serializers.gemspec +0 -64
- data/appveyor.yml +0 -28
- data/bin/bench +0 -171
- data/bin/bench_regression +0 -316
- data/bin/rubocop +0 -38
- data/bin/serve_benchmark +0 -39
- data/docs/README.md +0 -41
- data/docs/STYLE.md +0 -58
- data/docs/general/adapters.md +0 -269
- data/docs/general/caching.md +0 -58
- data/docs/general/configuration_options.md +0 -185
- data/docs/general/deserialization.md +0 -100
- data/docs/general/fields.md +0 -31
- data/docs/general/getting_started.md +0 -133
- data/docs/general/instrumentation.md +0 -40
- data/docs/general/key_transforms.md +0 -40
- data/docs/general/logging.md +0 -21
- data/docs/general/rendering.md +0 -293
- data/docs/general/serializers.md +0 -495
- data/docs/how-open-source-maintained.jpg +0 -0
- data/docs/howto/add_pagination_links.md +0 -138
- data/docs/howto/add_relationship_links.md +0 -140
- data/docs/howto/add_root_key.md +0 -62
- data/docs/howto/grape_integration.md +0 -42
- data/docs/howto/outside_controller_use.md +0 -66
- data/docs/howto/passing_arbitrary_options.md +0 -27
- data/docs/howto/serialize_poro.md +0 -73
- data/docs/howto/test.md +0 -154
- data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
- data/docs/integrations/ember-and-json-api.md +0 -147
- data/docs/integrations/grape.md +0 -19
- data/docs/jsonapi/errors.md +0 -56
- data/docs/jsonapi/schema/schema.json +0 -366
- data/docs/jsonapi/schema.md +0 -151
- data/docs/rfcs/0000-namespace.md +0 -106
- data/docs/rfcs/template.md +0 -15
- data/test/action_controller/adapter_selector_test.rb +0 -64
- data/test/action_controller/explicit_serializer_test.rb +0 -137
- data/test/action_controller/json/include_test.rb +0 -248
- data/test/action_controller/json_api/deserialization_test.rb +0 -114
- data/test/action_controller/json_api/errors_test.rb +0 -42
- data/test/action_controller/json_api/fields_test.rb +0 -68
- data/test/action_controller/json_api/linked_test.rb +0 -204
- data/test/action_controller/json_api/pagination_test.rb +0 -126
- data/test/action_controller/json_api/transform_test.rb +0 -191
- data/test/action_controller/lookup_proc_test.rb +0 -51
- data/test/action_controller/namespace_lookup_test.rb +0 -234
- data/test/action_controller/serialization_scope_name_test.rb +0 -237
- data/test/action_controller/serialization_test.rb +0 -480
- data/test/active_model_serializers/adapter_for_test.rb +0 -210
- data/test/active_model_serializers/json_pointer_test.rb +0 -24
- data/test/active_model_serializers/logging_test.rb +0 -79
- data/test/active_model_serializers/model_test.rb +0 -144
- data/test/active_model_serializers/railtie_test_isolated.rb +0 -70
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -163
- data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -73
- data/test/active_model_serializers/test/schema_test.rb +0 -133
- data/test/active_model_serializers/test/serializer_test.rb +0 -64
- data/test/active_record_test.rb +0 -11
- data/test/adapter/attributes_test.rb +0 -42
- data/test/adapter/deprecation_test.rb +0 -102
- data/test/adapter/json/belongs_to_test.rb +0 -47
- data/test/adapter/json/collection_test.rb +0 -106
- data/test/adapter/json/has_many_test.rb +0 -55
- data/test/adapter/json/transform_test.rb +0 -95
- data/test/adapter/json_api/belongs_to_test.rb +0 -157
- data/test/adapter/json_api/collection_test.rb +0 -98
- data/test/adapter/json_api/errors_test.rb +0 -78
- data/test/adapter/json_api/fields_test.rb +0 -98
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -98
- data/test/adapter/json_api/has_many_test.rb +0 -175
- data/test/adapter/json_api/has_one_test.rb +0 -82
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -215
- data/test/adapter/json_api/json_api_test.rb +0 -35
- data/test/adapter/json_api/linked_test.rb +0 -415
- data/test/adapter/json_api/links_test.rb +0 -112
- data/test/adapter/json_api/pagination_links_test.rb +0 -208
- data/test/adapter/json_api/parse_test.rb +0 -139
- data/test/adapter/json_api/relationship_test.rb +0 -399
- data/test/adapter/json_api/resource_meta_test.rb +0 -102
- data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -84
- data/test/adapter/json_api/transform_test.rb +0 -514
- data/test/adapter/json_api/type_test.rb +0 -195
- data/test/adapter/json_test.rb +0 -48
- data/test/adapter/null_test.rb +0 -24
- data/test/adapter/polymorphic_test.rb +0 -220
- data/test/adapter_test.rb +0 -69
- data/test/array_serializer_test.rb +0 -24
- data/test/benchmark/app.rb +0 -67
- data/test/benchmark/benchmarking_support.rb +0 -69
- data/test/benchmark/bm_active_record.rb +0 -83
- data/test/benchmark/bm_adapter.rb +0 -40
- data/test/benchmark/bm_caching.rb +0 -121
- data/test/benchmark/bm_lookup_chain.rb +0 -85
- data/test/benchmark/bm_transform.rb +0 -47
- data/test/benchmark/config.ru +0 -3
- data/test/benchmark/controllers.rb +0 -85
- data/test/benchmark/fixtures.rb +0 -221
- data/test/cache_test.rb +0 -717
- data/test/collection_serializer_test.rb +0 -129
- data/test/fixtures/active_record.rb +0 -115
- data/test/fixtures/poro.rb +0 -227
- data/test/generators/scaffold_controller_generator_test.rb +0 -26
- data/test/generators/serializer_generator_test.rb +0 -77
- data/test/grape_test.rb +0 -198
- data/test/lint_test.rb +0 -51
- data/test/logger_test.rb +0 -22
- data/test/poro_test.rb +0 -11
- data/test/serializable_resource_test.rb +0 -81
- data/test/serializers/association_macros_test.rb +0 -39
- data/test/serializers/associations_test.rb +0 -520
- data/test/serializers/attribute_test.rb +0 -155
- data/test/serializers/attributes_test.rb +0 -54
- data/test/serializers/caching_configuration_test_isolated.rb +0 -172
- data/test/serializers/configuration_test.rb +0 -34
- data/test/serializers/fieldset_test.rb +0 -16
- data/test/serializers/meta_test.rb +0 -204
- data/test/serializers/options_test.rb +0 -34
- data/test/serializers/read_attribute_for_serialization_test.rb +0 -81
- data/test/serializers/reflection_test.rb +0 -481
- data/test/serializers/root_test.rb +0 -23
- data/test/serializers/serialization_test.rb +0 -57
- data/test/serializers/serializer_for_test.rb +0 -138
- data/test/serializers/serializer_for_with_namespace_test.rb +0 -90
- data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/isolated_unit.rb +0 -86
- data/test/support/rails5_shims.rb +0 -55
- data/test/support/rails_app.rb +0 -40
- data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
- data/test/support/schemas/custom/show.json +0 -7
- data/test/support/schemas/hyper_schema.json +0 -93
- data/test/support/schemas/render_using_json_api.json +0 -43
- data/test/support/schemas/simple_json_pointers.json +0 -10
- data/test/support/serialization_testing.rb +0 -81
- data/test/test_helper.rb +0 -72
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'test_helper'
|
|
4
|
-
|
|
5
|
-
module ActiveModelSerializers
|
|
6
|
-
module Adapter
|
|
7
|
-
class JsonApi
|
|
8
|
-
class LinksTest < ActiveSupport::TestCase
|
|
9
|
-
class LinkAuthor < ::Model; associations :posts end
|
|
10
|
-
class LinkAuthorSerializer < ActiveModel::Serializer
|
|
11
|
-
link :self do
|
|
12
|
-
href "http://example.com/link_author/#{object.id}"
|
|
13
|
-
meta stuff: 'value'
|
|
14
|
-
end
|
|
15
|
-
link(:author) { link_author_url(object.id) }
|
|
16
|
-
link(:link_authors) { url_for(controller: 'link_authors', action: 'index', only_path: false) }
|
|
17
|
-
link(:posts) { link_author_posts_url(object.id) }
|
|
18
|
-
link :resource, 'http://example.com/resource'
|
|
19
|
-
link :yet_another do
|
|
20
|
-
"http://example.com/resource/#{object.id}"
|
|
21
|
-
end
|
|
22
|
-
link :conditional1, if: -> { instance_truth } do
|
|
23
|
-
"http://example.com/conditional1/#{object.id}"
|
|
24
|
-
end
|
|
25
|
-
link :conditional2, if: :instance_falsey do
|
|
26
|
-
"http://example.com/conditional2/#{object.id}"
|
|
27
|
-
end
|
|
28
|
-
link(:nil) { nil }
|
|
29
|
-
|
|
30
|
-
def instance_truth
|
|
31
|
-
true
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def instance_falsey
|
|
35
|
-
false
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def setup
|
|
40
|
-
Rails.application.routes.draw do
|
|
41
|
-
resources :link_authors do
|
|
42
|
-
resources :posts
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
@post = Post.new(id: 1337, comments: [], author: nil)
|
|
46
|
-
@author = LinkAuthor.new(id: 1337, posts: [@post])
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def test_toplevel_links
|
|
50
|
-
hash = ActiveModelSerializers::SerializableResource.new(
|
|
51
|
-
@post,
|
|
52
|
-
adapter: :json_api,
|
|
53
|
-
links: {
|
|
54
|
-
self: {
|
|
55
|
-
href: 'http://example.com/posts',
|
|
56
|
-
meta: {
|
|
57
|
-
stuff: 'value'
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
).serializable_hash
|
|
62
|
-
expected = {
|
|
63
|
-
self: {
|
|
64
|
-
href: 'http://example.com/posts',
|
|
65
|
-
meta: {
|
|
66
|
-
stuff: 'value'
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
assert_equal(expected, hash[:links])
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def test_nil_toplevel_links
|
|
74
|
-
hash = ActiveModelSerializers::SerializableResource.new(
|
|
75
|
-
@post,
|
|
76
|
-
adapter: :json_api,
|
|
77
|
-
links: nil
|
|
78
|
-
).serializable_hash
|
|
79
|
-
refute hash.key?(:links), 'No links key to be output'
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def test_nil_toplevel_links_json_adapter
|
|
83
|
-
hash = ActiveModelSerializers::SerializableResource.new(
|
|
84
|
-
@post,
|
|
85
|
-
adapter: :json,
|
|
86
|
-
links: nil
|
|
87
|
-
).serializable_hash
|
|
88
|
-
refute hash.key?(:links), 'No links key to be output'
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def test_resource_links
|
|
92
|
-
hash = serializable(@author, adapter: :json_api).serializable_hash
|
|
93
|
-
expected = {
|
|
94
|
-
self: {
|
|
95
|
-
href: 'http://example.com/link_author/1337',
|
|
96
|
-
meta: {
|
|
97
|
-
stuff: 'value'
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
author: 'http://example.com/link_authors/1337',
|
|
101
|
-
:"link-authors" => 'http://example.com/link_authors',
|
|
102
|
-
resource: 'http://example.com/resource',
|
|
103
|
-
posts: 'http://example.com/link_authors/1337/posts',
|
|
104
|
-
:"yet-another" => 'http://example.com/resource/1337',
|
|
105
|
-
conditional1: 'http://example.com/conditional1/1337'
|
|
106
|
-
}
|
|
107
|
-
assert_equal(expected, hash[:data][:links])
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'test_helper'
|
|
4
|
-
require 'will_paginate/array'
|
|
5
|
-
require 'kaminari'
|
|
6
|
-
require 'kaminari/hooks'
|
|
7
|
-
::Kaminari::Hooks.init
|
|
8
|
-
|
|
9
|
-
module ActiveModelSerializers
|
|
10
|
-
module Adapter
|
|
11
|
-
class JsonApi
|
|
12
|
-
class PaginationLinksTest < ActiveSupport::TestCase
|
|
13
|
-
URI = 'http://example.com'.freeze
|
|
14
|
-
|
|
15
|
-
def setup
|
|
16
|
-
ActionController::Base.cache_store.clear
|
|
17
|
-
@array = [
|
|
18
|
-
Profile.new(id: 1, name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
|
|
19
|
-
Profile.new(id: 2, name: 'Name 2', description: 'Description 2', comments: 'Comments 2'),
|
|
20
|
-
Profile.new(id: 3, name: 'Name 3', description: 'Description 3', comments: 'Comments 3'),
|
|
21
|
-
Profile.new(id: 4, name: 'Name 4', description: 'Description 4', comments: 'Comments 4'),
|
|
22
|
-
Profile.new(id: 5, name: 'Name 5', description: 'Description 5', comments: 'Comments 5')
|
|
23
|
-
]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def mock_request(query_parameters = {}, original_url = URI)
|
|
27
|
-
context = Minitest::Mock.new
|
|
28
|
-
context.expect(:request_url, original_url)
|
|
29
|
-
context.expect(:query_parameters, query_parameters)
|
|
30
|
-
context.expect(:key_transform, nil)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def load_adapter(paginated_collection, mock_request = nil)
|
|
34
|
-
render_options = { adapter: :json_api }
|
|
35
|
-
render_options[:serialization_context] = mock_request if mock_request
|
|
36
|
-
serializable(paginated_collection, render_options)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def using_kaminari(page = 2)
|
|
40
|
-
Kaminari.paginate_array(@array).page(page).per(2)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def using_will_paginate(page = 2)
|
|
44
|
-
@array.paginate(page: page, per_page: 2)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def data
|
|
48
|
-
{
|
|
49
|
-
data: [
|
|
50
|
-
{ id: '1', type: 'profiles', attributes: { name: 'Name 1', description: 'Description 1' } },
|
|
51
|
-
{ id: '2', type: 'profiles', attributes: { name: 'Name 2', description: 'Description 2' } },
|
|
52
|
-
{ id: '3', type: 'profiles', attributes: { name: 'Name 3', description: 'Description 3' } },
|
|
53
|
-
{ id: '4', type: 'profiles', attributes: { name: 'Name 4', description: 'Description 4' } },
|
|
54
|
-
{ id: '5', type: 'profiles', attributes: { name: 'Name 5', description: 'Description 5' } }
|
|
55
|
-
]
|
|
56
|
-
}
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def empty_collection_links
|
|
60
|
-
{
|
|
61
|
-
self: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
|
62
|
-
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
|
63
|
-
prev: nil,
|
|
64
|
-
next: nil,
|
|
65
|
-
last: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2"
|
|
66
|
-
}
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def links
|
|
70
|
-
{
|
|
71
|
-
links: {
|
|
72
|
-
self: "#{URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
|
|
73
|
-
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
|
74
|
-
prev: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
|
75
|
-
next: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2",
|
|
76
|
-
last: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2"
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def last_page_links
|
|
82
|
-
{
|
|
83
|
-
links: {
|
|
84
|
-
self: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2",
|
|
85
|
-
first: "#{URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
|
|
86
|
-
prev: "#{URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
|
|
87
|
-
next: nil,
|
|
88
|
-
last: "#{URI}?page%5Bnumber%5D=3&page%5Bsize%5D=2"
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def expected_response_when_unpaginatable
|
|
94
|
-
data
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def expected_response_with_pagination_links
|
|
98
|
-
{}.tap do |hash|
|
|
99
|
-
hash[:data] = data.values.flatten[2..3]
|
|
100
|
-
hash.merge! links
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def expected_response_without_pagination_links
|
|
105
|
-
{}.tap do |hash|
|
|
106
|
-
hash[:data] = data.values.flatten[2..3]
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def expected_response_with_pagination_links_and_additional_params
|
|
111
|
-
new_links = links[:links].each_with_object({}) { |(key, value), hash| hash[key] = "#{value}&test=test" }
|
|
112
|
-
{}.tap do |hash|
|
|
113
|
-
hash[:data] = data.values.flatten[2..3]
|
|
114
|
-
hash.merge! links: new_links
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def expected_response_with_last_page_pagination_links
|
|
119
|
-
{}.tap do |hash|
|
|
120
|
-
hash[:data] = [data.values.flatten.last]
|
|
121
|
-
hash.merge! last_page_links
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def expected_response_with_empty_collection_pagination_links
|
|
126
|
-
{}.tap do |hash|
|
|
127
|
-
hash[:data] = []
|
|
128
|
-
hash.merge! links: empty_collection_links
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def test_pagination_links_using_kaminari
|
|
133
|
-
adapter = load_adapter(using_kaminari, mock_request)
|
|
134
|
-
|
|
135
|
-
assert_equal expected_response_with_pagination_links, adapter.serializable_hash
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def test_pagination_links_using_will_paginate
|
|
139
|
-
adapter = load_adapter(using_will_paginate, mock_request)
|
|
140
|
-
|
|
141
|
-
assert_equal expected_response_with_pagination_links, adapter.serializable_hash
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def test_pagination_links_with_additional_params
|
|
145
|
-
adapter = load_adapter(using_will_paginate, mock_request(test: 'test'))
|
|
146
|
-
|
|
147
|
-
assert_equal expected_response_with_pagination_links_and_additional_params,
|
|
148
|
-
adapter.serializable_hash
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def test_pagination_links_when_zero_results_kaminari
|
|
152
|
-
@array = []
|
|
153
|
-
|
|
154
|
-
adapter = load_adapter(using_kaminari(1), mock_request)
|
|
155
|
-
|
|
156
|
-
assert_equal expected_response_with_empty_collection_pagination_links, adapter.serializable_hash
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
def test_pagination_links_when_zero_results_will_paginate
|
|
160
|
-
@array = []
|
|
161
|
-
|
|
162
|
-
adapter = load_adapter(using_will_paginate(1), mock_request)
|
|
163
|
-
|
|
164
|
-
assert_equal expected_response_with_empty_collection_pagination_links, adapter.serializable_hash
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def test_last_page_pagination_links_using_kaminari
|
|
168
|
-
adapter = load_adapter(using_kaminari(3), mock_request)
|
|
169
|
-
|
|
170
|
-
assert_equal expected_response_with_last_page_pagination_links, adapter.serializable_hash
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
def test_last_page_pagination_links_using_will_paginate
|
|
174
|
-
adapter = load_adapter(using_will_paginate(3), mock_request)
|
|
175
|
-
|
|
176
|
-
assert_equal expected_response_with_last_page_pagination_links, adapter.serializable_hash
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def test_not_showing_pagination_links
|
|
180
|
-
adapter = load_adapter(@array, mock_request)
|
|
181
|
-
|
|
182
|
-
assert_equal expected_response_when_unpaginatable, adapter.serializable_hash
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
def test_raises_descriptive_error_when_serialization_context_unset
|
|
186
|
-
render_options = { adapter: :json_api }
|
|
187
|
-
adapter = serializable(using_kaminari, render_options)
|
|
188
|
-
exception_class = ActiveModelSerializers::Adapter::JsonApi::PaginationLinks::MissingSerializationContextError
|
|
189
|
-
|
|
190
|
-
exception = assert_raises(exception_class) do
|
|
191
|
-
adapter.as_json
|
|
192
|
-
end
|
|
193
|
-
assert_equal exception_class, exception.class
|
|
194
|
-
assert_match(/CollectionSerializer#paginated\?/, exception.message)
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
def test_pagination_links_not_present_when_disabled
|
|
198
|
-
ActiveModel::Serializer.config.jsonapi_pagination_links_enabled = false
|
|
199
|
-
adapter = load_adapter(using_kaminari, mock_request)
|
|
200
|
-
|
|
201
|
-
assert_equal expected_response_without_pagination_links, adapter.serializable_hash
|
|
202
|
-
ensure
|
|
203
|
-
ActiveModel::Serializer.config.jsonapi_pagination_links_enabled = true
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
end
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'test_helper'
|
|
4
|
-
module ActiveModelSerializers
|
|
5
|
-
module Adapter
|
|
6
|
-
class JsonApi
|
|
7
|
-
module Deserialization
|
|
8
|
-
class ParseTest < Minitest::Test
|
|
9
|
-
def setup
|
|
10
|
-
@hash = {
|
|
11
|
-
'data' => {
|
|
12
|
-
'type' => 'photos',
|
|
13
|
-
'id' => 'zorglub',
|
|
14
|
-
'attributes' => {
|
|
15
|
-
'title' => 'Ember Hamster',
|
|
16
|
-
'src' => 'http://example.com/images/productivity.png'
|
|
17
|
-
},
|
|
18
|
-
'relationships' => {
|
|
19
|
-
'author' => {
|
|
20
|
-
'data' => nil
|
|
21
|
-
},
|
|
22
|
-
'photographer' => {
|
|
23
|
-
'data' => { 'type' => 'people', 'id' => '9' }
|
|
24
|
-
},
|
|
25
|
-
'comments' => {
|
|
26
|
-
'data' => [
|
|
27
|
-
{ 'type' => 'comments', 'id' => '1' },
|
|
28
|
-
{ 'type' => 'comments', 'id' => '2' }
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
@params = ActionController::Parameters.new(@hash)
|
|
35
|
-
@expected = {
|
|
36
|
-
id: 'zorglub',
|
|
37
|
-
title: 'Ember Hamster',
|
|
38
|
-
src: 'http://example.com/images/productivity.png',
|
|
39
|
-
author_id: nil,
|
|
40
|
-
photographer_id: '9',
|
|
41
|
-
comment_ids: %w(1 2)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@illformed_payloads = [nil,
|
|
45
|
-
{},
|
|
46
|
-
{
|
|
47
|
-
'data' => nil
|
|
48
|
-
}, {
|
|
49
|
-
'data' => { 'attributes' => [] }
|
|
50
|
-
}, {
|
|
51
|
-
'data' => { 'relationships' => [] }
|
|
52
|
-
}, {
|
|
53
|
-
'data' => {
|
|
54
|
-
'relationships' => { 'rel' => nil }
|
|
55
|
-
}
|
|
56
|
-
}, {
|
|
57
|
-
'data' => {
|
|
58
|
-
'relationships' => { 'rel' => {} }
|
|
59
|
-
}
|
|
60
|
-
}]
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def test_hash
|
|
64
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(@hash)
|
|
65
|
-
assert_equal(@expected, parsed_hash)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def test_actioncontroller_parameters
|
|
69
|
-
assert_equal(false, @params.permitted?)
|
|
70
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(@params)
|
|
71
|
-
assert_equal(@expected, parsed_hash)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def test_illformed_payloads_safe
|
|
75
|
-
@illformed_payloads.each do |p|
|
|
76
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse(p)
|
|
77
|
-
assert_equal({}, parsed_hash)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def test_illformed_payloads_unsafe
|
|
82
|
-
@illformed_payloads.each do |p|
|
|
83
|
-
assert_raises(InvalidDocument) do
|
|
84
|
-
ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(p)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def test_filter_fields_only
|
|
90
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(@hash, only: [:id, :title, :author])
|
|
91
|
-
expected = {
|
|
92
|
-
id: 'zorglub',
|
|
93
|
-
title: 'Ember Hamster',
|
|
94
|
-
author_id: nil
|
|
95
|
-
}
|
|
96
|
-
assert_equal(expected, parsed_hash)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def test_filter_fields_except
|
|
100
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(@hash, except: [:id, :title, :author])
|
|
101
|
-
expected = {
|
|
102
|
-
src: 'http://example.com/images/productivity.png',
|
|
103
|
-
photographer_id: '9',
|
|
104
|
-
comment_ids: %w(1 2)
|
|
105
|
-
}
|
|
106
|
-
assert_equal(expected, parsed_hash)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def test_keys
|
|
110
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(@hash, keys: { author: :user, title: :post_title })
|
|
111
|
-
expected = {
|
|
112
|
-
id: 'zorglub',
|
|
113
|
-
post_title: 'Ember Hamster',
|
|
114
|
-
src: 'http://example.com/images/productivity.png',
|
|
115
|
-
user_id: nil,
|
|
116
|
-
photographer_id: '9',
|
|
117
|
-
comment_ids: %w(1 2)
|
|
118
|
-
}
|
|
119
|
-
assert_equal(expected, parsed_hash)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def test_polymorphic
|
|
123
|
-
parsed_hash = ActiveModelSerializers::Adapter::JsonApi::Deserialization.parse!(@hash, polymorphic: [:photographer])
|
|
124
|
-
expected = {
|
|
125
|
-
id: 'zorglub',
|
|
126
|
-
title: 'Ember Hamster',
|
|
127
|
-
src: 'http://example.com/images/productivity.png',
|
|
128
|
-
author_id: nil,
|
|
129
|
-
photographer_id: '9',
|
|
130
|
-
photographer_type: 'Person',
|
|
131
|
-
comment_ids: %w(1 2)
|
|
132
|
-
}
|
|
133
|
-
assert_equal(expected, parsed_hash)
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|