Add failing test for AMS::Model accessor vs. attributes mutation

This commit is contained in:
Benjamin Fleischer 2016-08-31 21:33:06 -05:00
parent 80af763d2e
commit f8ca912de8

View File

@ -4,7 +4,7 @@ module ActiveModelSerializers
class ModelTest < ActiveSupport::TestCase class ModelTest < ActiveSupport::TestCase
include ActiveModel::Serializer::Lint::Tests include ActiveModel::Serializer::Lint::Tests
def setup setup do
@resource = ActiveModelSerializers::Model.new @resource = ActiveModelSerializers::Model.new
end end
@ -18,5 +18,52 @@ module ActiveModelSerializers
assert_equal model_instance.read_attribute_for_serialization(:key), value assert_equal model_instance.read_attribute_for_serialization(:key), value
end end
def test_attributes_can_be_read_for_serialization
klass = Class.new(ActiveModelSerializers::Model) do
attributes :one, :two, :three
end
original_attributes = { one: 1, two: 2, three: 3 }
instance = klass.new(original_attributes)
# Initial value
expected_attributes = { id: nil, one: 1, two: 2, three: 3 }.with_indifferent_access
assert_equal expected_attributes, instance.attributes
assert_equal 1, instance.one
assert_equal 1, instance.read_attribute_for_serialization(:one)
# Change via accessor
instance.one = :not_one
expected_attributes = { id: nil, one: :not_one, two: 2, three: 3 }.with_indifferent_access
assert_equal expected_attributes, instance.attributes
assert_equal :not_one, instance.one
assert_equal :not_one, instance.read_attribute_for_serialization(:one)
end
def test_id_attribute_can_be_read_for_serialization
klass = Class.new(ActiveModelSerializers::Model) do
attributes :id, :one, :two, :three
end
self.class.const_set(:SomeTestModel, klass)
original_attributes = { id: :ego, one: 1, two: 2, three: 3 }
instance = klass.new(original_attributes)
# Initial value
expected_attributes = { id: :ego, one: 1, two: 2, three: 3 }.with_indifferent_access
assert_equal expected_attributes, instance.attributes
assert_equal 1, instance.one
assert_equal 1, instance.read_attribute_for_serialization(:one)
# Change via accessor
instance.id = :superego
expected_attributes = { id: :superego, one: 1, two: 2, three: 3 }.with_indifferent_access
assert_equal expected_attributes, instance.attributes
assert_equal :superego, instance.id
assert_equal :superego, instance.read_attribute_for_serialization(:id)
ensure
self.class.send(:remove_const, :SomeTestModel)
end
end end
end end