1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/cases/dup_test.rb

158 lines
3.6 KiB
Ruby
Raw Normal View History

require "cases/helper"
2014-05-02 20:13:31 -04:00
require 'models/reply'
2010-11-23 13:13:43 -05:00
require 'models/topic'
module ActiveRecord
2010-11-23 14:13:24 -05:00
class DupTest < ActiveRecord::TestCase
2010-11-23 13:13:43 -05:00
fixtures :topics
def test_dup
2010-11-23 13:58:19 -05:00
assert !Topic.new.freeze.dup.frozen?
2010-11-23 13:13:43 -05:00
end
2010-11-23 16:38:20 -05:00
def test_not_readonly
topic = Topic.first
duped = topic.dup
2010-11-23 20:28:26 -05:00
assert !duped.readonly?, 'should not be readonly'
2010-11-23 16:38:20 -05:00
end
def test_is_readonly
topic = Topic.first
topic.readonly!
duped = topic.dup
2010-11-23 20:28:26 -05:00
assert duped.readonly?, 'should be readonly'
2010-11-23 16:38:20 -05:00
end
2010-11-23 13:13:43 -05:00
def test_dup_not_persisted
topic = Topic.first
duped = topic.dup
assert !duped.persisted?, 'topic not persisted'
assert duped.new_record?, 'topic is new'
end
def test_dup_not_destroyed
topic = Topic.first
topic.destroy
duped = topic.dup
assert_not duped.destroyed?
end
2010-11-23 13:13:43 -05:00
def test_dup_has_no_id
topic = Topic.first
duped = topic.dup
assert_nil duped.id
end
2010-11-23 13:58:19 -05:00
def test_dup_with_modified_attributes
topic = Topic.first
topic.author_name = 'Aaron'
duped = topic.dup
assert_equal 'Aaron', duped.author_name
end
def test_dup_with_changes
2010-11-23 14:57:33 -05:00
dbtopic = Topic.first
topic = Topic.new
topic.attributes = dbtopic.attributes.except("id")
2010-11-23 14:57:33 -05:00
#duped has no timestamp values
2010-11-23 14:57:33 -05:00
duped = dbtopic.dup
#clear topic timestamp values
topic.send(:clear_timestamp_attributes)
2010-11-23 13:58:19 -05:00
assert_equal topic.changes, duped.changes
2010-11-23 13:13:43 -05:00
end
def test_dup_topics_are_independent
topic = Topic.first
topic.author_name = 'Aaron'
duped = topic.dup
duped.author_name = 'meow'
assert_not_equal topic.changes, duped.changes
end
def test_dup_attributes_are_independent
topic = Topic.first
duped = topic.dup
duped.author_name = 'meow'
topic.author_name = 'Aaron'
assert_equal 'Aaron', topic.author_name
assert_equal 'meow', duped.author_name
end
def test_dup_timestamps_are_cleared
topic = Topic.first
assert_not_nil topic.updated_at
assert_not_nil topic.created_at
# temporary change to the topic object
topic.updated_at -= 3.days
#dup should not preserve the timestamps if present
new_topic = topic.dup
assert_nil new_topic.updated_at
assert_nil new_topic.created_at
new_topic.save
assert_not_nil new_topic.updated_at
assert_not_nil new_topic.created_at
end
def test_dup_after_initialize_callbacks
topic = Topic.new
assert Topic.after_initialize_called
Topic.after_initialize_called = false
topic.dup
assert Topic.after_initialize_called
end
def test_dup_validity_is_independent
2013-01-08 21:07:37 -05:00
repair_validations(Topic) do
Topic.validates_presence_of :title
2013-03-18 14:34:39 -04:00
topic = Topic.new("title" => "Literature")
2013-01-08 21:07:37 -05:00
topic.valid?
duped = topic.dup
duped.title = nil
assert duped.invalid?
topic.title = nil
duped.title = 'Mathematics'
assert topic.invalid?
assert duped.valid?
end
end
def test_dup_with_default_scope
prev_default_scopes = Topic.default_scopes
Topic.default_scopes = [proc { Topic.where(:approved => true) }]
topic = Topic.new(:approved => false)
2013-03-28 10:52:14 -04:00
assert !topic.dup.approved?, "should not be overridden by default scopes"
ensure
Topic.default_scopes = prev_default_scopes
end
def test_dup_without_primary_key
klass = Class.new(ActiveRecord::Base) do
self.table_name = 'parrots_pirates'
end
record = klass.create!
assert_nothing_raised do
record.dup
end
end
2010-11-23 13:13:43 -05:00
end
end