cm-active_model_serializers 0.10.0.rc1.1
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/.gitignore +21 -0
- data/.travis.yml +26 -0
- data/CHANGELOG.md +8 -0
- data/CONTRIBUTING.md +31 -0
- data/Gemfile +17 -0
- data/LICENSE.txt +22 -0
- data/README.md +326 -0
- data/Rakefile +12 -0
- data/cm-active_model_serializers.gemspec +26 -0
- data/lib/action_controller/serialization.rb +62 -0
- data/lib/active_model/serializer.rb +261 -0
- data/lib/active_model/serializer/adapter.rb +87 -0
- data/lib/active_model/serializer/adapter/fragment_cache.rb +78 -0
- data/lib/active_model/serializer/adapter/json.rb +52 -0
- data/lib/active_model/serializer/adapter/json/fragment_cache.rb +15 -0
- data/lib/active_model/serializer/adapter/json_api.rb +152 -0
- data/lib/active_model/serializer/adapter/json_api/fragment_cache.rb +22 -0
- data/lib/active_model/serializer/adapter/null.rb +11 -0
- data/lib/active_model/serializer/array_serializer.rb +32 -0
- data/lib/active_model/serializer/configuration.rb +13 -0
- data/lib/active_model/serializer/fieldset.rb +40 -0
- data/lib/active_model/serializer/version.rb +5 -0
- data/lib/active_model_serializers.rb +18 -0
- data/lib/generators/serializer/USAGE +6 -0
- data/lib/generators/serializer/serializer_generator.rb +37 -0
- data/lib/generators/serializer/templates/serializer.rb +8 -0
- data/test/action_controller/adapter_selector_test.rb +51 -0
- data/test/action_controller/explicit_serializer_test.rb +110 -0
- data/test/action_controller/json_api_linked_test.rb +173 -0
- data/test/action_controller/serialization_scope_name_test.rb +63 -0
- data/test/action_controller/serialization_test.rb +365 -0
- data/test/adapter/fragment_cache_test.rb +27 -0
- data/test/adapter/json/belongs_to_test.rb +48 -0
- data/test/adapter/json/collection_test.rb +73 -0
- data/test/adapter/json/has_many_test.rb +36 -0
- data/test/adapter/json_api/belongs_to_test.rb +147 -0
- data/test/adapter/json_api/collection_test.rb +89 -0
- data/test/adapter/json_api/has_many_embed_ids_test.rb +45 -0
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +98 -0
- data/test/adapter/json_api/has_many_test.rb +106 -0
- data/test/adapter/json_api/has_one_test.rb +59 -0
- data/test/adapter/json_api/linked_test.rb +257 -0
- data/test/adapter/json_test.rb +34 -0
- data/test/adapter/null_test.rb +25 -0
- data/test/adapter_test.rb +43 -0
- data/test/array_serializer_test.rb +43 -0
- data/test/fixtures/poro.rb +213 -0
- data/test/serializers/adapter_for_test.rb +50 -0
- data/test/serializers/associations_test.rb +127 -0
- data/test/serializers/attribute_test.rb +38 -0
- data/test/serializers/attributes_test.rb +63 -0
- data/test/serializers/cache_test.rb +128 -0
- data/test/serializers/configuration_test.rb +15 -0
- data/test/serializers/fieldset_test.rb +26 -0
- data/test/serializers/generators_test.rb +59 -0
- data/test/serializers/meta_test.rb +78 -0
- data/test/serializers/options_test.rb +21 -0
- data/test/serializers/serializer_for_test.rb +65 -0
- data/test/serializers/urls_test.rb +26 -0
- data/test/test_helper.rb +38 -0
- metadata +195 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActiveModel
|
4
|
+
class Serializer
|
5
|
+
class Adapter
|
6
|
+
class Json
|
7
|
+
class HasManyTestTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
ActionController::Base.cache_store.clear
|
10
|
+
@author = Author.new(id: 1, name: 'Steve K.')
|
11
|
+
@post = Post.new(title: 'New Post', body: 'Body')
|
12
|
+
@first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
13
|
+
@second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
|
14
|
+
@post.comments = [@first_comment, @second_comment]
|
15
|
+
@post.author = @author
|
16
|
+
@first_comment.post = @post
|
17
|
+
@second_comment.post = @post
|
18
|
+
@blog = Blog.new(id: 1, name: "My Blog!!")
|
19
|
+
@post.blog = @blog
|
20
|
+
|
21
|
+
@serializer = PostSerializer.new(@post)
|
22
|
+
@adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_has_many
|
26
|
+
assert_equal([
|
27
|
+
{id: 1, body: 'ZOMG A COMMENT'},
|
28
|
+
{id: 2, body: 'ZOMG ANOTHER COMMENT'}
|
29
|
+
], @adapter.serializable_hash[:comments])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActiveModel
|
4
|
+
class Serializer
|
5
|
+
class Adapter
|
6
|
+
class JsonApi
|
7
|
+
class BelongsToTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
@author = Author.new(id: 1, name: 'Steve K.')
|
10
|
+
@author.bio = nil
|
11
|
+
@author.roles = []
|
12
|
+
@blog = Blog.new(id: 23, name: 'AMS Blog')
|
13
|
+
@post = Post.new(id: 42, title: 'New Post', body: 'Body')
|
14
|
+
@anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!')
|
15
|
+
@comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
16
|
+
@post.comments = [@comment]
|
17
|
+
@post.blog = @blog
|
18
|
+
@anonymous_post.comments = []
|
19
|
+
@anonymous_post.blog = nil
|
20
|
+
@comment.post = @post
|
21
|
+
@comment.author = nil
|
22
|
+
@post.author = @author
|
23
|
+
@anonymous_post.author = nil
|
24
|
+
@blog = Blog.new(id: 1, name: "My Blog!!")
|
25
|
+
@blog.writer = @author
|
26
|
+
@blog.articles = [@post, @anonymous_post]
|
27
|
+
@author.posts = []
|
28
|
+
|
29
|
+
@serializer = CommentSerializer.new(@comment)
|
30
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
|
31
|
+
ActionController::Base.cache_store.clear
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_includes_post_id
|
35
|
+
expected = { linkage: { type: "posts", id: "42" } }
|
36
|
+
|
37
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:post])
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_includes_linked_post
|
41
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'post')
|
42
|
+
expected = [{
|
43
|
+
id: "42",
|
44
|
+
type: "posts",
|
45
|
+
title: 'New Post',
|
46
|
+
body: 'Body',
|
47
|
+
links: {
|
48
|
+
comments: { linkage: [ { type: "comments", id: "1" } ] },
|
49
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
50
|
+
author: { linkage: { type: "authors", id: "1" } }
|
51
|
+
}
|
52
|
+
}]
|
53
|
+
assert_equal expected, @adapter.serializable_hash[:included]
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_limiting_linked_post_fields
|
57
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'post', fields: {post: [:title]})
|
58
|
+
expected = [{
|
59
|
+
id: "42",
|
60
|
+
type: "posts",
|
61
|
+
title: 'New Post',
|
62
|
+
links: {
|
63
|
+
comments: { linkage: [ { type: "comments", id: "1" } ] },
|
64
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
65
|
+
author: { linkage: { type: "authors", id: "1" } }
|
66
|
+
}
|
67
|
+
}]
|
68
|
+
assert_equal expected, @adapter.serializable_hash[:included]
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_include_nil_author
|
72
|
+
serializer = PostSerializer.new(@anonymous_post)
|
73
|
+
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
|
74
|
+
|
75
|
+
assert_equal({comments: { linkage: [] }, blog: { linkage: { type: "blogs", id: "999" } }, author: { linkage: nil }}, adapter.serializable_hash[:data][:links])
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_include_type_for_association_when_different_than_name
|
79
|
+
serializer = BlogSerializer.new(@blog)
|
80
|
+
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
|
81
|
+
links = adapter.serializable_hash[:data][:links]
|
82
|
+
expected = {
|
83
|
+
writer: {
|
84
|
+
linkage: {
|
85
|
+
type: "authors",
|
86
|
+
id: "1"
|
87
|
+
}
|
88
|
+
},
|
89
|
+
articles: {
|
90
|
+
linkage: [
|
91
|
+
{
|
92
|
+
type: "posts",
|
93
|
+
id: "42"
|
94
|
+
},
|
95
|
+
{
|
96
|
+
type: "posts",
|
97
|
+
id: "43"
|
98
|
+
}
|
99
|
+
]
|
100
|
+
}
|
101
|
+
}
|
102
|
+
assert_equal expected, links
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_include_linked_resources_with_type_name
|
106
|
+
serializer = BlogSerializer.new(@blog)
|
107
|
+
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer, include: ['writer', 'articles'])
|
108
|
+
linked = adapter.serializable_hash[:included]
|
109
|
+
expected = [
|
110
|
+
{
|
111
|
+
id: "1",
|
112
|
+
type: "authors",
|
113
|
+
name: "Steve K.",
|
114
|
+
links: {
|
115
|
+
posts: { linkage: [] },
|
116
|
+
roles: { linkage: [] },
|
117
|
+
bio: { linkage: nil }
|
118
|
+
}
|
119
|
+
},{
|
120
|
+
id: "42",
|
121
|
+
type: "posts",
|
122
|
+
title: "New Post",
|
123
|
+
body: "Body",
|
124
|
+
links: {
|
125
|
+
comments: { linkage: [ { type: "comments", id: "1" } ] },
|
126
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
127
|
+
author: { linkage: { type: "authors", id: "1" } }
|
128
|
+
}
|
129
|
+
}, {
|
130
|
+
id: "43",
|
131
|
+
type: "posts",
|
132
|
+
title: "Hello!!",
|
133
|
+
body: "Hello, world!!",
|
134
|
+
links: {
|
135
|
+
comments: { linkage: [] },
|
136
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
137
|
+
author: { linkage: nil }
|
138
|
+
}
|
139
|
+
}
|
140
|
+
]
|
141
|
+
assert_equal expected, linked
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActiveModel
|
4
|
+
class Serializer
|
5
|
+
class Adapter
|
6
|
+
class JsonApi
|
7
|
+
class CollectionTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
@author = Author.new(id: 1, name: 'Steve K.')
|
10
|
+
@author.bio = nil
|
11
|
+
@blog = Blog.new(id: 23, name: 'AMS Blog')
|
12
|
+
@first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
|
13
|
+
@second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
|
14
|
+
@first_post.comments = []
|
15
|
+
@second_post.comments = []
|
16
|
+
@first_post.blog = @blog
|
17
|
+
@second_post.blog = nil
|
18
|
+
@first_post.author = @author
|
19
|
+
@second_post.author = @author
|
20
|
+
@author.posts = [@first_post, @second_post]
|
21
|
+
|
22
|
+
@serializer = ArraySerializer.new([@first_post, @second_post])
|
23
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
|
24
|
+
ActionController::Base.cache_store.clear
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_include_multiple_posts
|
28
|
+
expected = [
|
29
|
+
{
|
30
|
+
id: "1",
|
31
|
+
type: "posts",
|
32
|
+
title: "Hello!!",
|
33
|
+
body: "Hello, world!!",
|
34
|
+
links: {
|
35
|
+
comments: { linkage: [] },
|
36
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
37
|
+
author: { linkage: { type: "authors", id: "1" } }
|
38
|
+
}
|
39
|
+
},
|
40
|
+
{
|
41
|
+
id: "2",
|
42
|
+
type: "posts",
|
43
|
+
title: "New Post",
|
44
|
+
body: "Body",
|
45
|
+
links: {
|
46
|
+
comments: { linkage: [] },
|
47
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
48
|
+
author: { linkage: { type: "authors", id: "1" } }
|
49
|
+
}
|
50
|
+
}
|
51
|
+
]
|
52
|
+
|
53
|
+
assert_equal(expected, @adapter.serializable_hash[:data])
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_limiting_fields
|
57
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, fields: ['title'])
|
58
|
+
|
59
|
+
expected = [
|
60
|
+
{
|
61
|
+
id: "1",
|
62
|
+
type: "posts",
|
63
|
+
title: "Hello!!",
|
64
|
+
links: {
|
65
|
+
comments: { linkage: [] },
|
66
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
67
|
+
author: { linkage: { type: "authors", id: "1" } }
|
68
|
+
}
|
69
|
+
},
|
70
|
+
{
|
71
|
+
id: "2",
|
72
|
+
type: "posts",
|
73
|
+
title: "New Post",
|
74
|
+
links: {
|
75
|
+
comments: { linkage: [] },
|
76
|
+
blog: { linkage: { type: "blogs", id: "999" } },
|
77
|
+
author: { linkage: { type: "authors", id: "1" } }
|
78
|
+
}
|
79
|
+
}
|
80
|
+
]
|
81
|
+
|
82
|
+
assert_equal(expected, @adapter.serializable_hash[:data])
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActiveModel
|
4
|
+
class Serializer
|
5
|
+
class Adapter
|
6
|
+
class JsonApi
|
7
|
+
class HasManyEmbedIdsTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
@author = Author.new(name: 'Steve K.')
|
10
|
+
@author.bio = nil
|
11
|
+
@author.roles = nil
|
12
|
+
@first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
|
13
|
+
@second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
|
14
|
+
@author.posts = [@first_post, @second_post]
|
15
|
+
@first_post.author = @author
|
16
|
+
@second_post.author = @author
|
17
|
+
@first_post.comments = []
|
18
|
+
@second_post.comments = []
|
19
|
+
@blog = Blog.new(id: 23, name: 'AMS Blog')
|
20
|
+
@first_post.blog = @blog
|
21
|
+
@second_post.blog = nil
|
22
|
+
|
23
|
+
@serializer = AuthorSerializer.new(@author)
|
24
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_includes_comment_ids
|
28
|
+
expected = {
|
29
|
+
linkage: [
|
30
|
+
{ type: "posts", id: "1"},
|
31
|
+
{ type: "posts", id: "2"}
|
32
|
+
]
|
33
|
+
}
|
34
|
+
|
35
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:posts])
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_no_includes_linked_comments
|
39
|
+
assert_nil @adapter.serializable_hash[:linked]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActiveModel
|
4
|
+
class Serializer
|
5
|
+
class Adapter
|
6
|
+
class JsonApi
|
7
|
+
# Test 'has_many :assocs, serializer: AssocXSerializer'
|
8
|
+
class HasManyExplicitSerializerTest < Minitest::Test
|
9
|
+
def setup
|
10
|
+
@post = Post.new(title: 'New Post', body: 'Body')
|
11
|
+
@author = Author.new(name: 'Jane Blogger')
|
12
|
+
@author.posts = [@post]
|
13
|
+
@post.author = @author
|
14
|
+
@first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
15
|
+
@second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
|
16
|
+
@post.comments = [@first_comment, @second_comment]
|
17
|
+
@first_comment.post = @post
|
18
|
+
@first_comment.author = nil
|
19
|
+
@second_comment.post = @post
|
20
|
+
@second_comment.author = nil
|
21
|
+
@blog = Blog.new(id: 23, name: 'AMS Blog')
|
22
|
+
@post.blog = @blog
|
23
|
+
|
24
|
+
@serializer = PostPreviewSerializer.new(@post)
|
25
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(
|
26
|
+
@serializer,
|
27
|
+
include: ['comments', 'author']
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_includes_comment_ids
|
32
|
+
expected = {
|
33
|
+
linkage: [
|
34
|
+
{ type: 'comments', id: '1' },
|
35
|
+
{ type: 'comments', id: '2' }
|
36
|
+
]
|
37
|
+
}
|
38
|
+
|
39
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:comments])
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_includes_linked_data
|
43
|
+
# If CommentPreviewSerializer is applied correctly the body text will not be present in the output
|
44
|
+
expected = [
|
45
|
+
{
|
46
|
+
id: '1',
|
47
|
+
type: 'comments',
|
48
|
+
links: {
|
49
|
+
post: { linkage: { type: 'posts', id: @post.id.to_s } }
|
50
|
+
}
|
51
|
+
},
|
52
|
+
{
|
53
|
+
id: '2',
|
54
|
+
type: 'comments',
|
55
|
+
links: {
|
56
|
+
post: { linkage: { type: 'posts', id: @post.id.to_s } }
|
57
|
+
}
|
58
|
+
},
|
59
|
+
{
|
60
|
+
id: @author.id.to_s,
|
61
|
+
type: "authors",
|
62
|
+
links: {
|
63
|
+
posts: { linkage: [ {type: "posts", id: @post.id.to_s } ] }
|
64
|
+
}
|
65
|
+
}
|
66
|
+
]
|
67
|
+
|
68
|
+
assert_equal(expected, @adapter.serializable_hash[:included])
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_includes_author_id
|
72
|
+
expected = {
|
73
|
+
linkage: { type: "authors", id: @author.id.to_s }
|
74
|
+
}
|
75
|
+
|
76
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:author])
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_explicit_serializer_with_null_resource
|
80
|
+
@post.author = nil
|
81
|
+
|
82
|
+
expected = { linkage: nil }
|
83
|
+
|
84
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:author])
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_explicit_serializer_with_null_collection
|
88
|
+
@post.comments = []
|
89
|
+
|
90
|
+
expected = { linkage: [] }
|
91
|
+
|
92
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:comments])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActiveModel
|
4
|
+
class Serializer
|
5
|
+
class Adapter
|
6
|
+
class JsonApi
|
7
|
+
class HasManyTest < Minitest::Test
|
8
|
+
def setup
|
9
|
+
ActionController::Base.cache_store.clear
|
10
|
+
@author = Author.new(id: 1, name: 'Steve K.')
|
11
|
+
@author.posts = []
|
12
|
+
@author.bio = nil
|
13
|
+
@post = Post.new(id: 1, title: 'New Post', body: 'Body')
|
14
|
+
@post_without_comments = Post.new(id: 2, title: 'Second Post', body: 'Second')
|
15
|
+
@first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
16
|
+
@first_comment.author = nil
|
17
|
+
@second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
|
18
|
+
@second_comment.author = nil
|
19
|
+
@post.comments = [@first_comment, @second_comment]
|
20
|
+
@post_without_comments.comments = []
|
21
|
+
@first_comment.post = @post
|
22
|
+
@second_comment.post = @post
|
23
|
+
@post.author = @author
|
24
|
+
@post_without_comments.author = nil
|
25
|
+
@blog = Blog.new(id: 1, name: "My Blog!!")
|
26
|
+
@blog.writer = @author
|
27
|
+
@blog.articles = [@post]
|
28
|
+
@post.blog = @blog
|
29
|
+
@post_without_comments.blog = nil
|
30
|
+
|
31
|
+
@serializer = PostSerializer.new(@post)
|
32
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_includes_comment_ids
|
36
|
+
expected = { linkage: [ { type: "comments", id: "1" }, { type: "comments", id: "2" } ] }
|
37
|
+
|
38
|
+
assert_equal(expected, @adapter.serializable_hash[:data][:links][:comments])
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_includes_linked_comments
|
42
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'comments')
|
43
|
+
expected = [{
|
44
|
+
id: "1",
|
45
|
+
type: "comments",
|
46
|
+
body: 'ZOMG A COMMENT',
|
47
|
+
links: {
|
48
|
+
post: { linkage: { type: "posts", id: "1" } },
|
49
|
+
author: { linkage: nil }
|
50
|
+
}
|
51
|
+
}, {
|
52
|
+
id: "2",
|
53
|
+
type: "comments",
|
54
|
+
body: 'ZOMG ANOTHER COMMENT',
|
55
|
+
links: {
|
56
|
+
post: { linkage: { type: "posts", id: "1" } },
|
57
|
+
author: { linkage: nil }
|
58
|
+
}
|
59
|
+
}]
|
60
|
+
assert_equal expected, @adapter.serializable_hash[:included]
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_limit_fields_of_linked_comments
|
64
|
+
@adapter = ActiveModel::Serializer::Adapter::JsonApi.new(@serializer, include: 'comments', fields: {comment: [:id]})
|
65
|
+
expected = [{
|
66
|
+
id: "1",
|
67
|
+
type: "comments",
|
68
|
+
links: {
|
69
|
+
post: { linkage: { type: "posts", id: "1" } },
|
70
|
+
author: { linkage: nil }
|
71
|
+
}
|
72
|
+
}, {
|
73
|
+
id: "2",
|
74
|
+
type: "comments",
|
75
|
+
links: {
|
76
|
+
post: { linkage: { type: "posts", id: "1" } },
|
77
|
+
author: { linkage: nil }
|
78
|
+
}
|
79
|
+
}]
|
80
|
+
assert_equal expected, @adapter.serializable_hash[:included]
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_no_include_linked_if_comments_is_empty
|
84
|
+
serializer = PostSerializer.new(@post_without_comments)
|
85
|
+
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
|
86
|
+
|
87
|
+
assert_nil adapter.serializable_hash[:linked]
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_include_type_for_association_when_different_than_name
|
91
|
+
serializer = BlogSerializer.new(@blog)
|
92
|
+
adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer)
|
93
|
+
actual = adapter.serializable_hash[:data][:links][:articles]
|
94
|
+
expected = {
|
95
|
+
linkage: [{
|
96
|
+
type: "posts",
|
97
|
+
id: "1"
|
98
|
+
}]
|
99
|
+
}
|
100
|
+
assert_equal expected, actual
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|