active_model_serializers 0.10.9 → 0.10.10

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 (154) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -2
  3. data/lib/action_controller/serialization.rb +9 -1
  4. data/lib/active_model/serializer.rb +10 -2
  5. data/lib/active_model/serializer/version.rb +1 -1
  6. data/lib/active_model_serializers/adapter/attributes.rb +21 -0
  7. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +1 -1
  8. metadata +12 -259
  9. data/.github/ISSUE_TEMPLATE.md +0 -29
  10. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  11. data/.gitignore +0 -35
  12. data/.rubocop.yml +0 -109
  13. data/.simplecov +0 -110
  14. data/.travis.yml +0 -63
  15. data/CODE_OF_CONDUCT.md +0 -74
  16. data/CONTRIBUTING.md +0 -105
  17. data/Gemfile +0 -74
  18. data/Rakefile +0 -76
  19. data/active_model_serializers.gemspec +0 -64
  20. data/appveyor.yml +0 -28
  21. data/bin/bench +0 -171
  22. data/bin/bench_regression +0 -316
  23. data/bin/rubocop +0 -38
  24. data/bin/serve_benchmark +0 -39
  25. data/docs/README.md +0 -41
  26. data/docs/STYLE.md +0 -58
  27. data/docs/general/adapters.md +0 -269
  28. data/docs/general/caching.md +0 -58
  29. data/docs/general/configuration_options.md +0 -185
  30. data/docs/general/deserialization.md +0 -100
  31. data/docs/general/fields.md +0 -31
  32. data/docs/general/getting_started.md +0 -133
  33. data/docs/general/instrumentation.md +0 -40
  34. data/docs/general/key_transforms.md +0 -40
  35. data/docs/general/logging.md +0 -21
  36. data/docs/general/rendering.md +0 -293
  37. data/docs/general/serializers.md +0 -495
  38. data/docs/how-open-source-maintained.jpg +0 -0
  39. data/docs/howto/add_pagination_links.md +0 -138
  40. data/docs/howto/add_relationship_links.md +0 -140
  41. data/docs/howto/add_root_key.md +0 -62
  42. data/docs/howto/grape_integration.md +0 -42
  43. data/docs/howto/outside_controller_use.md +0 -66
  44. data/docs/howto/passing_arbitrary_options.md +0 -27
  45. data/docs/howto/serialize_poro.md +0 -73
  46. data/docs/howto/test.md +0 -154
  47. data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
  48. data/docs/integrations/ember-and-json-api.md +0 -147
  49. data/docs/integrations/grape.md +0 -19
  50. data/docs/jsonapi/errors.md +0 -56
  51. data/docs/jsonapi/schema.md +0 -151
  52. data/docs/jsonapi/schema/schema.json +0 -366
  53. data/docs/rfcs/0000-namespace.md +0 -106
  54. data/docs/rfcs/template.md +0 -15
  55. data/test/action_controller/adapter_selector_test.rb +0 -64
  56. data/test/action_controller/explicit_serializer_test.rb +0 -137
  57. data/test/action_controller/json/include_test.rb +0 -248
  58. data/test/action_controller/json_api/deserialization_test.rb +0 -114
  59. data/test/action_controller/json_api/errors_test.rb +0 -42
  60. data/test/action_controller/json_api/fields_test.rb +0 -68
  61. data/test/action_controller/json_api/linked_test.rb +0 -204
  62. data/test/action_controller/json_api/pagination_test.rb +0 -126
  63. data/test/action_controller/json_api/transform_test.rb +0 -191
  64. data/test/action_controller/lookup_proc_test.rb +0 -51
  65. data/test/action_controller/namespace_lookup_test.rb +0 -234
  66. data/test/action_controller/serialization_scope_name_test.rb +0 -237
  67. data/test/action_controller/serialization_test.rb +0 -480
  68. data/test/active_model_serializers/adapter_for_test.rb +0 -210
  69. data/test/active_model_serializers/json_pointer_test.rb +0 -24
  70. data/test/active_model_serializers/logging_test.rb +0 -79
  71. data/test/active_model_serializers/model_test.rb +0 -144
  72. data/test/active_model_serializers/railtie_test_isolated.rb +0 -70
  73. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -163
  74. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -73
  75. data/test/active_model_serializers/test/schema_test.rb +0 -133
  76. data/test/active_model_serializers/test/serializer_test.rb +0 -64
  77. data/test/active_record_test.rb +0 -11
  78. data/test/adapter/attributes_test.rb +0 -42
  79. data/test/adapter/deprecation_test.rb +0 -102
  80. data/test/adapter/json/belongs_to_test.rb +0 -47
  81. data/test/adapter/json/collection_test.rb +0 -106
  82. data/test/adapter/json/has_many_test.rb +0 -55
  83. data/test/adapter/json/transform_test.rb +0 -95
  84. data/test/adapter/json_api/belongs_to_test.rb +0 -157
  85. data/test/adapter/json_api/collection_test.rb +0 -98
  86. data/test/adapter/json_api/errors_test.rb +0 -78
  87. data/test/adapter/json_api/fields_test.rb +0 -98
  88. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -98
  89. data/test/adapter/json_api/has_many_test.rb +0 -175
  90. data/test/adapter/json_api/has_one_test.rb +0 -82
  91. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -215
  92. data/test/adapter/json_api/json_api_test.rb +0 -35
  93. data/test/adapter/json_api/linked_test.rb +0 -415
  94. data/test/adapter/json_api/links_test.rb +0 -112
  95. data/test/adapter/json_api/pagination_links_test.rb +0 -208
  96. data/test/adapter/json_api/parse_test.rb +0 -139
  97. data/test/adapter/json_api/relationship_test.rb +0 -399
  98. data/test/adapter/json_api/resource_meta_test.rb +0 -102
  99. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -84
  100. data/test/adapter/json_api/transform_test.rb +0 -514
  101. data/test/adapter/json_api/type_test.rb +0 -195
  102. data/test/adapter/json_test.rb +0 -48
  103. data/test/adapter/null_test.rb +0 -24
  104. data/test/adapter/polymorphic_test.rb +0 -220
  105. data/test/adapter_test.rb +0 -69
  106. data/test/array_serializer_test.rb +0 -24
  107. data/test/benchmark/app.rb +0 -67
  108. data/test/benchmark/benchmarking_support.rb +0 -69
  109. data/test/benchmark/bm_active_record.rb +0 -83
  110. data/test/benchmark/bm_adapter.rb +0 -40
  111. data/test/benchmark/bm_caching.rb +0 -121
  112. data/test/benchmark/bm_lookup_chain.rb +0 -85
  113. data/test/benchmark/bm_transform.rb +0 -47
  114. data/test/benchmark/config.ru +0 -3
  115. data/test/benchmark/controllers.rb +0 -85
  116. data/test/benchmark/fixtures.rb +0 -221
  117. data/test/cache_test.rb +0 -717
  118. data/test/collection_serializer_test.rb +0 -129
  119. data/test/fixtures/active_record.rb +0 -115
  120. data/test/fixtures/poro.rb +0 -227
  121. data/test/generators/scaffold_controller_generator_test.rb +0 -26
  122. data/test/generators/serializer_generator_test.rb +0 -77
  123. data/test/grape_test.rb +0 -198
  124. data/test/lint_test.rb +0 -51
  125. data/test/logger_test.rb +0 -22
  126. data/test/poro_test.rb +0 -11
  127. data/test/serializable_resource_test.rb +0 -81
  128. data/test/serializers/association_macros_test.rb +0 -39
  129. data/test/serializers/associations_test.rb +0 -520
  130. data/test/serializers/attribute_test.rb +0 -155
  131. data/test/serializers/attributes_test.rb +0 -54
  132. data/test/serializers/caching_configuration_test_isolated.rb +0 -172
  133. data/test/serializers/configuration_test.rb +0 -34
  134. data/test/serializers/fieldset_test.rb +0 -16
  135. data/test/serializers/meta_test.rb +0 -204
  136. data/test/serializers/options_test.rb +0 -34
  137. data/test/serializers/read_attribute_for_serialization_test.rb +0 -81
  138. data/test/serializers/reflection_test.rb +0 -481
  139. data/test/serializers/root_test.rb +0 -23
  140. data/test/serializers/serialization_test.rb +0 -57
  141. data/test/serializers/serializer_for_test.rb +0 -138
  142. data/test/serializers/serializer_for_with_namespace_test.rb +0 -90
  143. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  144. data/test/support/isolated_unit.rb +0 -86
  145. data/test/support/rails5_shims.rb +0 -55
  146. data/test/support/rails_app.rb +0 -40
  147. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  148. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  149. data/test/support/schemas/custom/show.json +0 -7
  150. data/test/support/schemas/hyper_schema.json +0 -93
  151. data/test/support/schemas/render_using_json_api.json +0 -43
  152. data/test/support/schemas/simple_json_pointers.json +0 -10
  153. data/test/support/serialization_testing.rb +0 -81
  154. data/test/test_helper.rb +0 -72
@@ -1,157 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- class BelongsToTest < ActiveSupport::TestCase
9
- def setup
10
- @author = Author.new(id: 1, name: 'Steve K.')
11
- @author.bio = nil
12
- @author.roles = []
13
- @blog = Blog.new(id: 23, name: 'AMS Blog')
14
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
15
- @anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!')
16
- @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
17
- @post.comments = [@comment]
18
- @post.blog = @blog
19
- @anonymous_post.comments = []
20
- @anonymous_post.blog = nil
21
- @comment.post = @post
22
- @comment.author = nil
23
- @post.author = @author
24
- @anonymous_post.author = nil
25
- @blog = Blog.new(id: 1, name: 'My Blog!!')
26
- @blog.writer = @author
27
- @blog.articles = [@post, @anonymous_post]
28
- @author.posts = []
29
-
30
- @serializer = CommentSerializer.new(@comment)
31
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
32
- ActionController::Base.cache_store.clear
33
- end
34
-
35
- def test_includes_post_id
36
- expected = { data: { type: 'posts', id: '42' } }
37
-
38
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:post])
39
- end
40
-
41
- def test_includes_linked_post
42
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:post])
43
- expected = [{
44
- id: '42',
45
- type: 'posts',
46
- attributes: {
47
- title: 'New Post',
48
- body: 'Body'
49
- },
50
- relationships: {
51
- comments: { data: [{ type: 'comments', id: '1' }] },
52
- blog: { data: { type: 'blogs', id: '999' } },
53
- author: { data: { type: 'authors', id: '1' } }
54
- }
55
- }]
56
- assert_equal expected, @adapter.serializable_hash[:included]
57
- end
58
-
59
- def test_limiting_linked_post_fields
60
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:post], fields: { post: [:title, :comments, :blog, :author] })
61
- expected = [{
62
- id: '42',
63
- type: 'posts',
64
- attributes: {
65
- title: 'New Post'
66
- },
67
- relationships: {
68
- comments: { data: [{ type: 'comments', id: '1' }] },
69
- blog: { data: { type: 'blogs', id: '999' } },
70
- author: { data: { type: 'authors', id: '1' } }
71
- }
72
- }]
73
- assert_equal expected, @adapter.serializable_hash[:included]
74
- end
75
-
76
- def test_include_nil_author
77
- serializer = PostSerializer.new(@anonymous_post)
78
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
79
-
80
- assert_equal({ comments: { data: [] }, blog: { data: { type: 'blogs', id: '999' } }, author: { data: nil } }, adapter.serializable_hash[:data][:relationships])
81
- end
82
-
83
- def test_include_type_for_association_when_different_than_name
84
- serializer = BlogSerializer.new(@blog)
85
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
86
- relationships = adapter.serializable_hash[:data][:relationships]
87
- expected = {
88
- writer: {
89
- data: {
90
- type: 'authors',
91
- id: '1'
92
- }
93
- },
94
- articles: {
95
- data: [
96
- {
97
- type: 'posts',
98
- id: '42'
99
- },
100
- {
101
- type: 'posts',
102
- id: '43'
103
- }
104
- ]
105
- }
106
- }
107
- assert_equal expected, relationships
108
- end
109
-
110
- def test_include_linked_resources_with_type_name
111
- serializer = BlogSerializer.new(@blog)
112
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, include: [:writer, :articles])
113
- linked = adapter.serializable_hash[:included]
114
- expected = [
115
- {
116
- id: '1',
117
- type: 'authors',
118
- attributes: {
119
- name: 'Steve K.'
120
- },
121
- relationships: {
122
- posts: { data: [] },
123
- roles: { data: [] },
124
- bio: { data: nil }
125
- }
126
- }, {
127
- id: '42',
128
- type: 'posts',
129
- attributes: {
130
- title: 'New Post',
131
- body: 'Body'
132
- },
133
- relationships: {
134
- comments: { data: [{ type: 'comments', id: '1' }] },
135
- blog: { data: { type: 'blogs', id: '999' } },
136
- author: { data: { type: 'authors', id: '1' } }
137
- }
138
- }, {
139
- id: '43',
140
- type: 'posts',
141
- attributes: {
142
- title: 'Hello!!',
143
- body: 'Hello, world!!'
144
- },
145
- relationships: {
146
- comments: { data: [] },
147
- blog: { data: { type: 'blogs', id: '999' } },
148
- author: { data: nil }
149
- }
150
- }
151
- ]
152
- assert_equal expected, linked
153
- end
154
- end
155
- end
156
- end
157
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- class CollectionTest < ActiveSupport::TestCase
9
- def setup
10
- @author = Author.new(id: 1, name: 'Steve K.')
11
- @author.bio = nil
12
- @blog = Blog.new(id: 23, name: 'AMS Blog')
13
- @first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
14
- @second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
15
- @first_post.comments = []
16
- @second_post.comments = []
17
- @first_post.blog = @blog
18
- @second_post.blog = nil
19
- @first_post.author = @author
20
- @second_post.author = @author
21
- @author.posts = [@first_post, @second_post]
22
-
23
- @serializer = ActiveModel::Serializer::CollectionSerializer.new([@first_post, @second_post])
24
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
25
- ActionController::Base.cache_store.clear
26
- end
27
-
28
- def test_include_multiple_posts
29
- expected = [
30
- {
31
- id: '1',
32
- type: 'posts',
33
- attributes: {
34
- title: 'Hello!!',
35
- body: 'Hello, world!!'
36
- },
37
- relationships: {
38
- comments: { data: [] },
39
- blog: { data: { type: 'blogs', id: '999' } },
40
- author: { data: { type: 'authors', id: '1' } }
41
- }
42
- },
43
- {
44
- id: '2',
45
- type: 'posts',
46
- attributes: {
47
- title: 'New Post',
48
- body: 'Body'
49
- },
50
- relationships: {
51
- comments: { data: [] },
52
- blog: { data: { type: 'blogs', id: '999' } },
53
- author: { data: { type: 'authors', id: '1' } }
54
- }
55
- }
56
- ]
57
-
58
- assert_equal(expected, @adapter.serializable_hash[:data])
59
- end
60
-
61
- def test_limiting_fields
62
- actual = ActiveModelSerializers::SerializableResource.new(
63
- [@first_post, @second_post],
64
- adapter: :json_api,
65
- fields: { posts: %w(title comments blog author) }
66
- ).serializable_hash
67
- expected = [
68
- {
69
- id: '1',
70
- type: 'posts',
71
- attributes: {
72
- title: 'Hello!!'
73
- },
74
- relationships: {
75
- comments: { data: [] },
76
- blog: { data: { type: 'blogs', id: '999' } },
77
- author: { data: { type: 'authors', id: '1' } }
78
- }
79
- },
80
- {
81
- id: '2',
82
- type: 'posts',
83
- attributes: {
84
- title: 'New Post'
85
- },
86
- relationships: {
87
- comments: { data: [] },
88
- blog: { data: { type: 'blogs', id: '999' } },
89
- author: { data: { type: 'authors', id: '1' } }
90
- }
91
- }
92
- ]
93
- assert_equal(expected, actual[:data])
94
- end
95
- end
96
- end
97
- end
98
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi < Base
8
- class ErrorsTest < Minitest::Test
9
- include ActiveModel::Serializer::Lint::Tests
10
-
11
- def setup
12
- @resource = ModelWithErrors.new
13
- end
14
-
15
- def test_active_model_with_error
16
- options = {
17
- serializer: ActiveModel::Serializer::ErrorSerializer,
18
- adapter: :json_api
19
- }
20
-
21
- @resource.errors.add(:name, 'cannot be nil')
22
-
23
- serializable_resource = ActiveModelSerializers::SerializableResource.new(@resource, options)
24
- assert_equal serializable_resource.serializer_instance.attributes, {}
25
- assert_equal serializable_resource.serializer_instance.object, @resource
26
-
27
- expected_errors_object = {
28
- errors: [
29
- {
30
- source: { pointer: '/data/attributes/name' },
31
- detail: 'cannot be nil'
32
- }
33
- ]
34
- }
35
- assert_equal serializable_resource.as_json, expected_errors_object
36
- end
37
-
38
- def test_active_model_with_multiple_errors
39
- options = {
40
- serializer: ActiveModel::Serializer::ErrorSerializer,
41
- adapter: :json_api
42
- }
43
-
44
- @resource.errors.add(:name, 'cannot be nil')
45
- @resource.errors.add(:name, 'must be longer')
46
- @resource.errors.add(:id, 'must be a uuid')
47
-
48
- serializable_resource = ActiveModelSerializers::SerializableResource.new(@resource, options)
49
- assert_equal serializable_resource.serializer_instance.attributes, {}
50
- assert_equal serializable_resource.serializer_instance.object, @resource
51
-
52
- expected_errors_object = {
53
- errors: [
54
- { source: { pointer: '/data/attributes/name' }, detail: 'cannot be nil' },
55
- { source: { pointer: '/data/attributes/name' }, detail: 'must be longer' },
56
- { source: { pointer: '/data/attributes/id' }, detail: 'must be a uuid' }
57
- ]
58
- }
59
- assert_equal serializable_resource.as_json, expected_errors_object
60
- end
61
-
62
- # see http://jsonapi.org/examples/
63
- def test_parameter_source_type_error
64
- parameter = 'auther'
65
- error_source = ActiveModelSerializers::Adapter::JsonApi::Error.error_source(:parameter, parameter)
66
- assert_equal({ parameter: parameter }, error_source)
67
- end
68
-
69
- def test_unknown_source_type_error
70
- value = 'auther'
71
- assert_raises(ActiveModelSerializers::Adapter::JsonApi::Error::UnknownSourceTypeError) do
72
- ActiveModelSerializers::Adapter::JsonApi::Error.error_source(:hyper, value)
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- class FieldsTest < ActiveSupport::TestCase
9
- class Post < ::Model
10
- attributes :title, :body
11
- associations :author, :comments
12
- end
13
- class Author < ::Model
14
- attributes :name, :birthday
15
- end
16
- class Comment < ::Model
17
- attributes :body
18
- associations :author, :post
19
- end
20
-
21
- class PostSerializer < ActiveModel::Serializer
22
- type 'posts'
23
- attributes :title, :body
24
- belongs_to :author
25
- has_many :comments
26
- end
27
-
28
- class AuthorSerializer < ActiveModel::Serializer
29
- type 'authors'
30
- attributes :name, :birthday
31
- end
32
-
33
- class CommentSerializer < ActiveModel::Serializer
34
- type 'comments'
35
- attributes :body
36
- belongs_to :author
37
- end
38
-
39
- def setup
40
- @author = Author.new(id: 1, name: 'Lucas', birthday: '10.01.1990')
41
- @comment1 = Comment.new(id: 7, body: 'cool', author: @author)
42
- @comment2 = Comment.new(id: 12, body: 'awesome', author: @author)
43
- @post = Post.new(id: 1337, title: 'Title 1', body: 'Body 1',
44
- author: @author, comments: [@comment1, @comment2])
45
- @comment1.post = @post
46
- @comment2.post = @post
47
- end
48
-
49
- def test_fields_attributes
50
- fields = { posts: [:title] }
51
- hash = serializable(@post, adapter: :json_api, fields: fields).serializable_hash
52
- expected = {
53
- title: 'Title 1'
54
- }
55
-
56
- assert_equal(expected, hash[:data][:attributes])
57
- end
58
-
59
- def test_fields_relationships
60
- fields = { posts: [:author] }
61
- hash = serializable(@post, adapter: :json_api, fields: fields).serializable_hash
62
- expected = {
63
- author: {
64
- data: {
65
- type: 'authors',
66
- id: '1'
67
- }
68
- }
69
- }
70
-
71
- assert_equal(expected, hash[:data][:relationships])
72
- end
73
-
74
- def test_fields_included
75
- fields = { posts: [:author], comments: [:body] }
76
- hash = serializable(@post, adapter: :json_api, fields: fields, include: 'comments').serializable_hash
77
- expected = [
78
- {
79
- type: 'comments',
80
- id: '7',
81
- attributes: {
82
- body: 'cool'
83
- }
84
- }, {
85
- type: 'comments',
86
- id: '12',
87
- attributes: {
88
- body: 'awesome'
89
- }
90
- }
91
- ]
92
-
93
- assert_equal(expected, hash[:included])
94
- end
95
- end
96
- end
97
- end
98
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- # Test 'has_many :assocs, serializer: AssocXSerializer'
9
- class HasManyExplicitSerializerTest < ActiveSupport::TestCase
10
- def setup
11
- @post = Post.new(title: 'New Post', body: 'Body')
12
- @author = Author.new(name: 'Jane Blogger')
13
- @author.posts = [@post]
14
- @post.author = @author
15
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
16
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
17
- @post.comments = [@first_comment, @second_comment]
18
- @first_comment.post = @post
19
- @first_comment.author = nil
20
- @second_comment.post = @post
21
- @second_comment.author = nil
22
- @blog = Blog.new(id: 23, name: 'AMS Blog')
23
- @post.blog = @blog
24
-
25
- @serializer = PostPreviewSerializer.new(@post)
26
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(
27
- @serializer,
28
- include: [:comments, :author]
29
- )
30
- end
31
-
32
- def test_includes_comment_ids
33
- expected = {
34
- data: [
35
- { type: 'comments', id: '1' },
36
- { type: 'comments', id: '2' }
37
- ]
38
- }
39
-
40
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:comments])
41
- end
42
-
43
- def test_includes_linked_data
44
- # If CommentPreviewSerializer is applied correctly the body text will not be present in the output
45
- expected = [
46
- {
47
- id: '1',
48
- type: 'comments',
49
- relationships: {
50
- post: { data: { type: 'posts', id: @post.id.to_s } }
51
- }
52
- },
53
- {
54
- id: '2',
55
- type: 'comments',
56
- relationships: {
57
- post: { data: { type: 'posts', id: @post.id.to_s } }
58
- }
59
- },
60
- {
61
- id: @author.id.to_s,
62
- type: 'authors',
63
- relationships: {
64
- posts: { data: [{ type: 'posts', id: @post.id.to_s }] }
65
- }
66
- }
67
- ]
68
-
69
- assert_equal(expected, @adapter.serializable_hash[:included])
70
- end
71
-
72
- def test_includes_author_id
73
- expected = {
74
- data: { type: 'authors', id: @author.id.to_s }
75
- }
76
-
77
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:author])
78
- end
79
-
80
- def test_explicit_serializer_with_null_resource
81
- @post.author = nil
82
-
83
- expected = { data: nil }
84
-
85
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:author])
86
- end
87
-
88
- def test_explicit_serializer_with_null_collection
89
- @post.comments = []
90
-
91
- expected = { data: [] }
92
-
93
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:comments])
94
- end
95
- end
96
- end
97
- end
98
- end