diff --git a/lib/ams/serializer.rb b/lib/ams/serializer.rb index 65c788a5..a09f6c3a 100644 --- a/lib/ams/serializer.rb +++ b/lib/ams/serializer.rb @@ -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 diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index 2e95cb79..898b828d 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -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 diff --git a/test/unit/serializer/attributes_test.rb b/test/unit/serializer/attributes_test.rb index 2c0a20fb..ac0a2b69 100644 --- a/test/unit/serializer/attributes_test.rb +++ b/test/unit/serializer/attributes_test.rb @@ -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 diff --git a/test/unit/serializer/object_delegation_test.rb b/test/unit/serializer/object_delegation_test.rb new file mode 100644 index 00000000..2c25b681 --- /dev/null +++ b/test/unit/serializer/object_delegation_test.rb @@ -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 diff --git a/test/unit/serializer/relationships_test.rb b/test/unit/serializer/relationships_test.rb index d90e6dea..cc7bfa83 100644 --- a/test/unit/serializer/relationships_test.rb +++ b/test/unit/serializer/relationships_test.rb @@ -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 diff --git a/test/unit/serializer/type_test.rb b/test/unit/serializer/type_test.rb new file mode 100644 index 00000000..bcdb0b4c --- /dev/null +++ b/test/unit/serializer/type_test.rb @@ -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