Improve test coverage

This commit is contained in:
Benjamin Fleischer 2017-06-28 22:27:08 -05:00
parent 57052d646d
commit e5cbe799f1
6 changed files with 90 additions and 7 deletions

View File

@ -333,9 +333,5 @@ module AMS
def method_missing(name, *args, &block)
object.send(name, *args, &block)
end
def respond_to_missing?(name, include_private = false)
object.respond_to?(name, include_private)
end
end
end

View File

@ -52,7 +52,7 @@ end
class ParentModel < PlainModel
attributes :id, :name, :description
associations :child_models
associations :child_models, :child_model
end
class ChildModel < PlainModel
attributes :id, :name

View File

@ -5,6 +5,7 @@ module AMS
class Serializer
class AttributesTest < Test
class ParentModelSerializer < Serializer
# TODO: test :id is forbidden attribute name
attribute :name
attribute :description, key: :summary
end

View File

@ -0,0 +1,31 @@
# frozen_string_literal: true
require "test_helper"
module AMS
class Serializer
class ObjectDelegationTest < Test
class ParentModelSerializer < Serializer
end
def setup
super
@object = ParentModel.new(id: 1)
class << @object
def delegated?
true
end
end
@serializer_class = ParentModelSerializer
@serializer_instance = @serializer_class.new(@object)
end
def test_model_delegates_method_to_object
assert @serializer_instance.delegated?
end
def test_model_delegates_respond_to_object
refute @serializer_instance.respond_to?(:not_delegated?)
end
end
end
end

View File

@ -5,14 +5,18 @@ module AMS
class Serializer
class RelationshipsTest < Test
class ParentModelSerializer < Serializer
# TODO: test to: :many without :ids option
# TODO: test to: :one without :id option
# TODO: test to: :unknown_option raises ArgumentError
relation :child_models, type: :comments, to: :many, ids: "object.child_models.map(&:id)"
relation :child_model, type: :comments, to: :one, id: "object.child_model.id"
end
def setup
super
@relation = ChildModel.new(id: 2, name: "comment")
@object = ParentModel.new(
child_models: [@relation]
child_models: [ ChildModel.new(id: 2, name: "comments") ],
child_model: ChildModel.new(id: 1, name: "comment")
)
@serializer_class = ParentModelSerializer
@serializer_instance = @serializer_class.new(@object)
@ -22,6 +26,9 @@ module AMS
expected_relations = {
child_models: {
data: [{ type: "comments", id: 2 }]
},
child_model: {
data: { type: "comments", id: 1 }
}
}
assert_equal expected_relations, @serializer_instance.relations
@ -33,6 +40,30 @@ module AMS
}
assert_equal expected, @serializer_instance.relationship_data(5, :bananas)
end
def test_model_instance_relationship_to_one
expected = {
data: { id: @object.child_model.id, type: "comments" }
}
assert_equal expected, @serializer_instance.child_model
end
def test_model_instance_relationship_to_one_id
expected = @object.child_model.id
assert_equal expected, @serializer_instance.related_child_model_id
end
def test_model_instance_relationship_to_many
expected = {
data: [{ id: @object.child_models.first.id, type: "comments" }]
}
assert_equal expected, @serializer_instance.child_models
end
def test_model_instance_relationship_to_many_ids
expected = @object.child_models.map(&:id)
assert_equal expected, @serializer_instance.related_child_models_ids
end
end
end
end

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
require "test_helper"
module AMS
class Serializer
class TypeTest < Test
class ParentModelSerializer < Serializer
type :something
end
def setup
super
@object = ParentModel.new(id: 1,)
@serializer_class = ParentModelSerializer
@serializer_instance = @serializer_class.new(@object)
end
def test_model_instance_type
expected_type = :something
assert_equal expected_type, @serializer_instance.type
end
end
end
end