aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/test/cases/serializer_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activemodel/test/cases/serializer_test.rb')
-rw-r--r--activemodel/test/cases/serializer_test.rb81
1 files changed, 76 insertions, 5 deletions
diff --git a/activemodel/test/cases/serializer_test.rb b/activemodel/test/cases/serializer_test.rb
index 1c1da588f7..24de81d48f 100644
--- a/activemodel/test/cases/serializer_test.rb
+++ b/activemodel/test/cases/serializer_test.rb
@@ -1,17 +1,33 @@
require "cases/helper"
class SerializerTest < ActiveModel::TestCase
- class User
+ class Model
+ def initialize(hash)
+ @attributes = hash
+ end
+
+ def read_attribute_for_serialization(name)
+ @attributes[name]
+ end
+ end
+
+ class User < Model
attr_accessor :superuser
+ def initialize(hash={})
+ super hash.merge(:first_name => "Jose", :last_name => "Valim", :password => "oh noes yugive my password")
+ end
+
def super_user?
@superuser
end
+ end
- def read_attribute_for_serialization(name)
- hash = { :first_name => "Jose", :last_name => "Valim", :password => "oh noes yugive my password" }
- hash[name]
- end
+ class Post < Model
+ attr_accessor :comments
+ end
+
+ class Comment < Model
end
class UserSerializer < ActiveModel::Serializer
@@ -36,6 +52,25 @@ class SerializerTest < ActiveModel::TestCase
end
end
+ class CommentSerializer
+ def initialize(comment, scope)
+ @comment, @scope = comment, scope
+ end
+
+ def serializable_hash
+ { title: @comment.read_attribute_for_serialization(:title) }
+ end
+
+ def as_json
+ { comment: serializable_hash }
+ end
+ end
+
+ class PostSerializer < ActiveModel::Serializer
+ attributes :title, :body
+ has_many :comments, :serializer => CommentSerializer
+ end
+
def test_attributes
user = User.new
user_serializer = UserSerializer.new(user, nil)
@@ -72,4 +107,40 @@ class SerializerTest < ActiveModel::TestCase
assert_equal({ :first_name => "Jose", :last_name => "Valim", :super_user => true }, hash)
end
+
+ def test_has_many
+ user = User.new
+
+ post = Post.new(:title => "New Post", :body => "Body of new post", :email => "tenderlove@tenderlove.com")
+ comments = [Comment.new(:title => "Comment1"), Comment.new(:title => "Comment2")]
+ post.comments = comments
+
+ post_serializer = PostSerializer.new(post, user)
+
+ assert_equal({
+ :title => "New Post",
+ :body => "Body of new post",
+ :comments => [
+ { :title => "Comment1" },
+ { :title => "Comment2" }
+ ]
+ }, post_serializer.as_json)
+ end
+
+ class Blog < Model
+ attr_accessor :author
+ end
+
+ class AuthorSerializer < ActiveModel::Serializer
+ attributes :first_name, :last_name
+ end
+
+ class BlogSerializer < ActiveModel::Serializer
+ has_one :author, :serializer => AuthorSerializer
+ end
+
+ def test_has_one
+ user = User.new
+ blog = Blog.new(:author => user)
+ end
end