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.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -2
  3. data/README.md +18 -19
  4. data/lib/action_controller/serialization.rb +9 -1
  5. data/lib/active_model/serializer/collection_serializer.rb +11 -2
  6. data/lib/active_model/serializer/concerns/caching.rb +2 -1
  7. data/lib/active_model/serializer/fieldset.rb +1 -1
  8. data/lib/active_model/serializer/reflection.rb +4 -4
  9. data/lib/active_model/serializer/version.rb +1 -1
  10. data/lib/active_model/serializer.rb +13 -4
  11. data/lib/active_model_serializers/adapter/attributes.rb +21 -0
  12. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +5 -1
  13. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +1 -1
  14. data/lib/active_model_serializers/model/caching.rb +26 -0
  15. metadata +20 -292
  16. data/.github/ISSUE_TEMPLATE.md +0 -29
  17. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  18. data/.gitignore +0 -35
  19. data/.rubocop.yml +0 -109
  20. data/.simplecov +0 -110
  21. data/.travis.yml +0 -63
  22. data/CODE_OF_CONDUCT.md +0 -74
  23. data/CONTRIBUTING.md +0 -105
  24. data/Gemfile +0 -74
  25. data/Rakefile +0 -76
  26. data/active_model_serializers.gemspec +0 -64
  27. data/appveyor.yml +0 -28
  28. data/bin/bench +0 -171
  29. data/bin/bench_regression +0 -316
  30. data/bin/rubocop +0 -38
  31. data/bin/serve_benchmark +0 -39
  32. data/docs/README.md +0 -41
  33. data/docs/STYLE.md +0 -58
  34. data/docs/general/adapters.md +0 -269
  35. data/docs/general/caching.md +0 -58
  36. data/docs/general/configuration_options.md +0 -185
  37. data/docs/general/deserialization.md +0 -100
  38. data/docs/general/fields.md +0 -31
  39. data/docs/general/getting_started.md +0 -133
  40. data/docs/general/instrumentation.md +0 -40
  41. data/docs/general/key_transforms.md +0 -40
  42. data/docs/general/logging.md +0 -21
  43. data/docs/general/rendering.md +0 -293
  44. data/docs/general/serializers.md +0 -495
  45. data/docs/how-open-source-maintained.jpg +0 -0
  46. data/docs/howto/add_pagination_links.md +0 -138
  47. data/docs/howto/add_relationship_links.md +0 -140
  48. data/docs/howto/add_root_key.md +0 -62
  49. data/docs/howto/grape_integration.md +0 -42
  50. data/docs/howto/outside_controller_use.md +0 -66
  51. data/docs/howto/passing_arbitrary_options.md +0 -27
  52. data/docs/howto/serialize_poro.md +0 -73
  53. data/docs/howto/test.md +0 -154
  54. data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
  55. data/docs/integrations/ember-and-json-api.md +0 -147
  56. data/docs/integrations/grape.md +0 -19
  57. data/docs/jsonapi/errors.md +0 -56
  58. data/docs/jsonapi/schema/schema.json +0 -366
  59. data/docs/jsonapi/schema.md +0 -151
  60. data/docs/rfcs/0000-namespace.md +0 -106
  61. data/docs/rfcs/template.md +0 -15
  62. data/test/action_controller/adapter_selector_test.rb +0 -64
  63. data/test/action_controller/explicit_serializer_test.rb +0 -137
  64. data/test/action_controller/json/include_test.rb +0 -248
  65. data/test/action_controller/json_api/deserialization_test.rb +0 -114
  66. data/test/action_controller/json_api/errors_test.rb +0 -42
  67. data/test/action_controller/json_api/fields_test.rb +0 -68
  68. data/test/action_controller/json_api/linked_test.rb +0 -204
  69. data/test/action_controller/json_api/pagination_test.rb +0 -126
  70. data/test/action_controller/json_api/transform_test.rb +0 -191
  71. data/test/action_controller/lookup_proc_test.rb +0 -51
  72. data/test/action_controller/namespace_lookup_test.rb +0 -234
  73. data/test/action_controller/serialization_scope_name_test.rb +0 -237
  74. data/test/action_controller/serialization_test.rb +0 -480
  75. data/test/active_model_serializers/adapter_for_test.rb +0 -210
  76. data/test/active_model_serializers/json_pointer_test.rb +0 -24
  77. data/test/active_model_serializers/logging_test.rb +0 -79
  78. data/test/active_model_serializers/model_test.rb +0 -144
  79. data/test/active_model_serializers/railtie_test_isolated.rb +0 -70
  80. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -163
  81. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -73
  82. data/test/active_model_serializers/test/schema_test.rb +0 -133
  83. data/test/active_model_serializers/test/serializer_test.rb +0 -64
  84. data/test/active_record_test.rb +0 -11
  85. data/test/adapter/attributes_test.rb +0 -42
  86. data/test/adapter/deprecation_test.rb +0 -102
  87. data/test/adapter/json/belongs_to_test.rb +0 -47
  88. data/test/adapter/json/collection_test.rb +0 -106
  89. data/test/adapter/json/has_many_test.rb +0 -55
  90. data/test/adapter/json/transform_test.rb +0 -95
  91. data/test/adapter/json_api/belongs_to_test.rb +0 -157
  92. data/test/adapter/json_api/collection_test.rb +0 -98
  93. data/test/adapter/json_api/errors_test.rb +0 -78
  94. data/test/adapter/json_api/fields_test.rb +0 -98
  95. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -98
  96. data/test/adapter/json_api/has_many_test.rb +0 -175
  97. data/test/adapter/json_api/has_one_test.rb +0 -82
  98. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -215
  99. data/test/adapter/json_api/json_api_test.rb +0 -35
  100. data/test/adapter/json_api/linked_test.rb +0 -415
  101. data/test/adapter/json_api/links_test.rb +0 -112
  102. data/test/adapter/json_api/pagination_links_test.rb +0 -208
  103. data/test/adapter/json_api/parse_test.rb +0 -139
  104. data/test/adapter/json_api/relationship_test.rb +0 -399
  105. data/test/adapter/json_api/resource_meta_test.rb +0 -102
  106. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -84
  107. data/test/adapter/json_api/transform_test.rb +0 -514
  108. data/test/adapter/json_api/type_test.rb +0 -195
  109. data/test/adapter/json_test.rb +0 -48
  110. data/test/adapter/null_test.rb +0 -24
  111. data/test/adapter/polymorphic_test.rb +0 -220
  112. data/test/adapter_test.rb +0 -69
  113. data/test/array_serializer_test.rb +0 -24
  114. data/test/benchmark/app.rb +0 -67
  115. data/test/benchmark/benchmarking_support.rb +0 -69
  116. data/test/benchmark/bm_active_record.rb +0 -83
  117. data/test/benchmark/bm_adapter.rb +0 -40
  118. data/test/benchmark/bm_caching.rb +0 -121
  119. data/test/benchmark/bm_lookup_chain.rb +0 -85
  120. data/test/benchmark/bm_transform.rb +0 -47
  121. data/test/benchmark/config.ru +0 -3
  122. data/test/benchmark/controllers.rb +0 -85
  123. data/test/benchmark/fixtures.rb +0 -221
  124. data/test/cache_test.rb +0 -717
  125. data/test/collection_serializer_test.rb +0 -129
  126. data/test/fixtures/active_record.rb +0 -115
  127. data/test/fixtures/poro.rb +0 -227
  128. data/test/generators/scaffold_controller_generator_test.rb +0 -26
  129. data/test/generators/serializer_generator_test.rb +0 -77
  130. data/test/grape_test.rb +0 -198
  131. data/test/lint_test.rb +0 -51
  132. data/test/logger_test.rb +0 -22
  133. data/test/poro_test.rb +0 -11
  134. data/test/serializable_resource_test.rb +0 -81
  135. data/test/serializers/association_macros_test.rb +0 -39
  136. data/test/serializers/associations_test.rb +0 -520
  137. data/test/serializers/attribute_test.rb +0 -155
  138. data/test/serializers/attributes_test.rb +0 -54
  139. data/test/serializers/caching_configuration_test_isolated.rb +0 -172
  140. data/test/serializers/configuration_test.rb +0 -34
  141. data/test/serializers/fieldset_test.rb +0 -16
  142. data/test/serializers/meta_test.rb +0 -204
  143. data/test/serializers/options_test.rb +0 -34
  144. data/test/serializers/read_attribute_for_serialization_test.rb +0 -81
  145. data/test/serializers/reflection_test.rb +0 -481
  146. data/test/serializers/root_test.rb +0 -23
  147. data/test/serializers/serialization_test.rb +0 -57
  148. data/test/serializers/serializer_for_test.rb +0 -138
  149. data/test/serializers/serializer_for_with_namespace_test.rb +0 -90
  150. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  151. data/test/support/isolated_unit.rb +0 -86
  152. data/test/support/rails5_shims.rb +0 -55
  153. data/test/support/rails_app.rb +0 -40
  154. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  155. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  156. data/test/support/schemas/custom/show.json +0 -7
  157. data/test/support/schemas/hyper_schema.json +0 -93
  158. data/test/support/schemas/render_using_json_api.json +0 -43
  159. data/test/support/schemas/simple_json_pointers.json +0 -10
  160. data/test/support/serialization_testing.rb +0 -81
  161. data/test/test_helper.rb +0 -72
@@ -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
@@ -1,175 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- class HasManyTest < ActiveSupport::TestCase
9
- class ModelWithoutSerializer < ::Model
10
- attributes :id, :name
11
- end
12
-
13
- def setup
14
- ActionController::Base.cache_store.clear
15
- @author = Author.new(id: 1, name: 'Steve K.')
16
- @author.posts = []
17
- @author.bio = nil
18
- @post = Post.new(id: 1, title: 'New Post', body: 'Body')
19
- @post_without_comments = Post.new(id: 2, title: 'Second Post', body: 'Second')
20
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
21
- @first_comment.author = nil
22
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
23
- @second_comment.author = nil
24
- @post.comments = [@first_comment, @second_comment]
25
- @post_without_comments.comments = []
26
- @first_comment.post = @post
27
- @second_comment.post = @post
28
- @post.author = @author
29
- @post_without_comments.author = nil
30
- @blog = Blog.new(id: 1, name: 'My Blog!!')
31
- @blog.writer = @author
32
- @blog.articles = [@post]
33
- @post.blog = @blog
34
- @post_without_comments.blog = nil
35
- @tag = ModelWithoutSerializer.new(id: 1, name: '#hash_tag')
36
- @post.tags = [@tag]
37
- @serializer = PostSerializer.new(@post)
38
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
39
-
40
- @virtual_value = VirtualValue.new(id: 1)
41
- end
42
-
43
- def test_includes_comment_ids
44
- expected = { data: [{ type: 'comments', id: '1' }, { type: 'comments', id: '2' }] }
45
-
46
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:comments])
47
- end
48
-
49
- test 'relationships can be whitelisted via fields' do
50
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, fields: { posts: [:author] })
51
- result = @adapter.serializable_hash
52
- expected = {
53
- data: {
54
- id: '1',
55
- type: 'posts',
56
- relationships: {
57
- author: {
58
- data: {
59
- id: '1',
60
- type: 'authors'
61
- }
62
- }
63
- }
64
- }
65
- }
66
-
67
- assert_equal expected, result
68
- end
69
-
70
- def test_includes_linked_comments
71
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:comments])
72
- expected = [{
73
- id: '1',
74
- type: 'comments',
75
- attributes: {
76
- body: 'ZOMG A COMMENT'
77
- },
78
- relationships: {
79
- post: { data: { type: 'posts', id: '1' } },
80
- author: { data: nil }
81
- }
82
- }, {
83
- id: '2',
84
- type: 'comments',
85
- attributes: {
86
- body: 'ZOMG ANOTHER COMMENT'
87
- },
88
- relationships: {
89
- post: { data: { type: 'posts', id: '1' } },
90
- author: { data: nil }
91
- }
92
- }]
93
- assert_equal expected, @adapter.serializable_hash[:included]
94
- end
95
-
96
- def test_limit_fields_of_linked_comments
97
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:comments], fields: { comment: [:id, :post, :author] })
98
- expected = [{
99
- id: '1',
100
- type: 'comments',
101
- relationships: {
102
- post: { data: { type: 'posts', id: '1' } },
103
- author: { data: nil }
104
- }
105
- }, {
106
- id: '2',
107
- type: 'comments',
108
- relationships: {
109
- post: { data: { type: 'posts', id: '1' } },
110
- author: { data: nil }
111
- }
112
- }]
113
- assert_equal expected, @adapter.serializable_hash[:included]
114
- end
115
-
116
- def test_no_include_linked_if_comments_is_empty
117
- serializer = PostSerializer.new(@post_without_comments)
118
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
119
-
120
- assert_nil adapter.serializable_hash[:linked]
121
- end
122
-
123
- def test_include_type_for_association_when_different_than_name
124
- serializer = BlogSerializer.new(@blog)
125
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
126
- actual = adapter.serializable_hash[:data][:relationships][:articles]
127
-
128
- expected = {
129
- data: [{
130
- type: 'posts',
131
- id: '1'
132
- }]
133
- }
134
- assert_equal expected, actual
135
- end
136
-
137
- def test_has_many_with_no_serializer
138
- post_serializer_class = Class.new(ActiveModel::Serializer) do
139
- attributes :id
140
- has_many :tags
141
- end
142
- serializer = post_serializer_class.new(@post)
143
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
144
-
145
- assert_equal({
146
- data: {
147
- id: '1',
148
- type: 'posts',
149
- relationships: {
150
- tags: { data: [@tag.as_json] }
151
- }
152
- }
153
- }, adapter.serializable_hash)
154
- end
155
-
156
- def test_has_many_with_virtual_value
157
- serializer = VirtualValueSerializer.new(@virtual_value)
158
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
159
-
160
- assert_equal({
161
- data: {
162
- id: '1',
163
- type: 'virtual-values',
164
- relationships: {
165
- maker: { data: { type: 'makers', id: '1' } },
166
- reviews: { data: [{ type: 'reviews', id: '1' },
167
- { type: 'reviews', id: '2' }] }
168
- }
169
- }
170
- }, adapter.serializable_hash)
171
- end
172
- end
173
- end
174
- end
175
- end
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module ActiveModelSerializers
6
- module Adapter
7
- class JsonApi
8
- class HasOneTest < ActiveSupport::TestCase
9
- def setup
10
- @author = Author.new(id: 1, name: 'Steve K.')
11
- @bio = Bio.new(id: 43, content: 'AMS Contributor')
12
- @author.bio = @bio
13
- @bio.author = @author
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
- @anonymous_post.comments = []
19
- @comment.post = @post
20
- @comment.author = nil
21
- @post.author = @author
22
- @anonymous_post.author = nil
23
- @blog = Blog.new(id: 1, name: 'My Blog!!')
24
- @blog.writer = @author
25
- @blog.articles = [@post, @anonymous_post]
26
- @author.posts = []
27
- @author.roles = []
28
-
29
- @virtual_value = VirtualValue.new(id: 1)
30
-
31
- @serializer = AuthorSerializer.new(@author)
32
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:bio, :posts])
33
- end
34
-
35
- def test_includes_bio_id
36
- expected = { data: { type: 'bios', id: '43' } }
37
-
38
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:bio])
39
- end
40
-
41
- def test_includes_linked_bio
42
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:bio])
43
-
44
- expected = [
45
- {
46
- id: '43',
47
- type: 'bios',
48
- attributes: {
49
- content: 'AMS Contributor',
50
- rating: nil
51
- },
52
- relationships: {
53
- author: { data: { type: 'authors', id: '1' } }
54
- }
55
- }
56
- ]
57
-
58
- assert_equal(expected, @adapter.serializable_hash[:included])
59
- end
60
-
61
- def test_has_one_with_virtual_value
62
- serializer = VirtualValueSerializer.new(@virtual_value)
63
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
64
-
65
- expected = {
66
- data: {
67
- id: '1',
68
- type: 'virtual-values',
69
- relationships: {
70
- maker: { data: { type: 'makers', id: '1' } },
71
- reviews: { data: [{ type: 'reviews', id: '1' },
72
- { type: 'reviews', id: '2' }] }
73
- }
74
- }
75
- }
76
-
77
- assert_equal(expected, adapter.serializable_hash)
78
- end
79
- end
80
- end
81
- end
82
- end