From 69274ce5163559419cf50ec2524103b93c12e2e9 Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Fri, 6 Jun 2014 15:08:28 +0200 Subject: serialized Type should delegate `type_cast_for_write` to underlying Type This adds a regression test for #14411, which was fixed by #15503. Closes #14411 Closes #14595 --- .../test/cases/adapters/postgresql/hstore_test.rb | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'activerecord/test/cases/adapters/postgresql') diff --git a/activerecord/test/cases/adapters/postgresql/hstore_test.rb b/activerecord/test/cases/adapters/postgresql/hstore_test.rb index 78134ff316..a6482786c7 100644 --- a/activerecord/test/cases/adapters/postgresql/hstore_test.rb +++ b/activerecord/test/cases/adapters/postgresql/hstore_test.rb @@ -294,6 +294,41 @@ class PostgresqlHstoreTest < ActiveRecord::TestCase Hstore.update_all tags: { } assert_equal({ }, hstore.reload.tags) end + + # FIXME: remove this lambda once `serialize` no longer issues a db connection. + LAZY_MODELS = lambda do + return if defined?(TagCollection) + + class TagCollection + def initialize(hash); @hash = hash end + def to_hash; @hash end + def self.load(hash); new(hash) end + def self.dump(object); object.to_hash end + end + + class HstoreWithSerialize < Hstore + serialize :tags, TagCollection + end + end + + def test_hstore_with_serialized_attributes + LAZY_MODELS.call + HstoreWithSerialize.create! tags: TagCollection.new({"one" => "two"}) + record = HstoreWithSerialize.first + assert_instance_of TagCollection, record.tags + assert_equal({"one" => "two"}, record.tags.to_hash) + record.tags = TagCollection.new("three" => "four") + record.save! + assert_equal({"three" => "four"}, HstoreWithSerialize.first.tags.to_hash) + end + + def test_clone_hstore_with_serialized_attributes + LAZY_MODELS.call + HstoreWithSerialize.create! tags: TagCollection.new({"one" => "two"}) + record = HstoreWithSerialize.first + dupe = record.dup + assert_equal({"one" => "two"}, dupe.tags.to_hash) + end end private -- cgit v1.2.3