mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
Add failing test for AMS::Model accessor vs. attributes mutation
This commit is contained in:
parent
80af763d2e
commit
f8ca912de8
@ -4,7 +4,7 @@ module ActiveModelSerializers
|
||||
class ModelTest < ActiveSupport::TestCase
|
||||
include ActiveModel::Serializer::Lint::Tests
|
||||
|
||||
def setup
|
||||
setup do
|
||||
@resource = ActiveModelSerializers::Model.new
|
||||
end
|
||||
|
||||
@ -18,5 +18,52 @@ module ActiveModelSerializers
|
||||
|
||||
assert_equal model_instance.read_attribute_for_serialization(:key), value
|
||||
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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user