From 7c8f3edc99560d15ae715bdbe99a32bc538e9396 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sat, 12 Nov 2005 11:59:54 +0000 Subject: r4325@asus: jeremy | 2005-11-12 03:57:46 -0800 PostgreSQL: correctly discover custom primary key sequences. PostgreSQL: smarter sequence name defaults, stricter last_insert_id, warn on pk without sequence. Base.reset_sequence_name analogous to reset_table_name (mostly useful for testing). Base.define_attr_method allows nil values. References #2594. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2985 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/test/fixtures_test.rb | 48 ++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 15 deletions(-) (limited to 'activerecord/test/fixtures_test.rb') diff --git a/activerecord/test/fixtures_test.rb b/activerecord/test/fixtures_test.rb index 888d743078..41fc666945 100755 --- a/activerecord/test/fixtures_test.rb +++ b/activerecord/test/fixtures_test.rb @@ -173,27 +173,45 @@ end if Account.connection.respond_to?(:reset_pk_sequence!) class FixturesResetPkSequenceTest < Test::Unit::TestCase fixtures :accounts + fixtures :companies - def test_resets_to_min_pk - Account.delete_all - Account.connection.reset_pk_sequence!(Account.table_name) + def setup + @instances = [Account.new(:credit_limit => 50), Company.new(:name => 'RoR Consulting')] + end + + def test_resets_to_min_pk_with_specified_pk_and_sequence + @instances.each do |instance| + model = instance.class + model.delete_all + model.connection.reset_pk_sequence!(model.table_name, model.primary_key, model.sequence_name) - one = Account.new(:credit_limit => 50) - one.save! - assert_equal 1, one.id + instance.save! + assert_equal 1, instance.id, "Sequence reset for #{model.table_name} failed." + end end - def test_create_fixtures_resets_sequences - # create_fixtures performs reset_pk_sequence! - max_id = create_fixtures('accounts').inject(0) do |max_id, (name, fixture)| - fixture_id = fixture['id'].to_i - fixture_id > max_id ? fixture_id : max_id + def test_resets_to_min_pk_with_default_pk_and_sequence + @instances.each do |instance| + model = instance.class + model.delete_all + model.connection.reset_pk_sequence!(model.table_name) + + instance.save! + assert_equal 1, instance.id, "Sequence reset for #{model.table_name} failed." end + end - # Clone the last fixture to check that it gets the next greatest id. - another = Account.new(:credit_limit => 1200) - another.save! - assert_equal max_id + 1, another.id + def test_create_fixtures_resets_sequences + @instances.each do |instance| + max_id = create_fixtures(instance.class.table_name).inject(0) do |max_id, (name, fixture)| + fixture_id = fixture['id'].to_i + fixture_id > max_id ? fixture_id : max_id + end + + # Clone the last fixture to check that it gets the next greatest id. + instance.save! + assert_equal max_id + 1, instance.id, "Sequence reset for #{instance.class.table_name} failed." + end end end end -- cgit v1.2.3