diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-12-05 12:13:49 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-12-05 12:13:49 -0800 |
commit | 0c692f4d121792117b6a71e5ed590a31c3b9d12e (patch) | |
tree | 869bf3fb884e55847bf7aa34b4c6b463d1590720 /activerecord/test | |
parent | 2e299fca715b083a60222a85e48f9d3b8dd8ce93 (diff) | |
parent | 94ef7b515b9bd026a0ed67ef7dabbf0b4ab554e3 (diff) | |
download | rails-0c692f4d121792117b6a71e5ed590a31c3b9d12e.tar.gz rails-0c692f4d121792117b6a71e5ed590a31c3b9d12e.tar.bz2 rails-0c692f4d121792117b6a71e5ed590a31c3b9d12e.zip |
Merge branch 'joshsusser-master' into merge
* joshsusser-master:
style cleanup
Add migration history to schema.rb dump
Add metadata to schema_migrations
Conflicts:
activerecord/CHANGELOG.md
activerecord/lib/active_record/schema.rb
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/ar_schema_test.rb | 51 | ||||
-rw-r--r-- | activerecord/test/cases/migration/logger_test.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/migration/table_and_index_test.rb | 24 | ||||
-rw-r--r-- | activerecord/test/cases/migration_test.rb | 11 | ||||
-rw-r--r-- | activerecord/test/cases/migrator_test.rb | 9 | ||||
-rw-r--r-- | activerecord/test/cases/schema_dumper_test.rb | 17 | ||||
-rw-r--r-- | activerecord/test/cases/schema_migration_test.rb | 54 | ||||
-rw-r--r-- | activerecord/test/migrations/always_safe/1001_always_safe.rb | 5 | ||||
-rw-r--r-- | activerecord/test/migrations/always_safe/1002_still_safe.rb | 5 |
9 files changed, 149 insertions, 31 deletions
diff --git a/activerecord/test/cases/ar_schema_test.rb b/activerecord/test/cases/ar_schema_test.rb index b2eac0349b..bd47ba8741 100644 --- a/activerecord/test/cases/ar_schema_test.rb +++ b/activerecord/test/cases/ar_schema_test.rb @@ -46,4 +46,55 @@ if ActiveRecord::Base.connection.supports_migrations? end end + class ActiveRecordSchemaMigrationsTest < ActiveRecordSchemaTest + def setup + super + ActiveRecord::SchemaMigration.delete_all + end + + def test_migration_adds_row_to_migrations_table + schema = ActiveRecord::Schema.new + schema.migration(1001, "", "") + schema.migration(1002, "123456789012345678901234567890ab", "add_magic_power_to_unicorns") + + migrations = ActiveRecord::SchemaMigration.all.to_a + assert_equal 2, migrations.length + + assert_equal 1001, migrations[0].version + assert_match %r{^2\d\d\d-}, migrations[0].migrated_at.to_s(:db) + assert_equal "", migrations[0].fingerprint + assert_equal "", migrations[0].name + + assert_equal 1002, migrations[1].version + assert_match %r{^2\d\d\d-}, migrations[1].migrated_at.to_s(:db) + assert_equal "123456789012345678901234567890ab", migrations[1].fingerprint + assert_equal "add_magic_power_to_unicorns", migrations[1].name + end + + def test_define_clears_schema_migrations + assert_nothing_raised do + ActiveRecord::Schema.define do + migrations do + migration(123001, "", "") + end + end + ActiveRecord::Schema.define do + migrations do + migration(123001, "", "") + end + end + end + end + + def test_define_raises_if_both_version_and_explicit_migrations + assert_raise(ArgumentError) do + ActiveRecord::Schema.define(version: 123001) do + migrations do + migration(123001, "", "") + end + end + end + end + end + end diff --git a/activerecord/test/cases/migration/logger_test.rb b/activerecord/test/cases/migration/logger_test.rb index ee0c20747e..6e62c1fcbe 100644 --- a/activerecord/test/cases/migration/logger_test.rb +++ b/activerecord/test/cases/migration/logger_test.rb @@ -6,10 +6,12 @@ module ActiveRecord # mysql can't roll back ddl changes self.use_transactional_fixtures = false - Migration = Struct.new(:name, :version) do + Migration = Struct.new(:name, :version, :filename, :fingerprint) do def migrate direction # do nothing end + def filename; "anon.rb"; end + def fingerprint; "123456789012345678901234567890ab"; end end def setup diff --git a/activerecord/test/cases/migration/table_and_index_test.rb b/activerecord/test/cases/migration/table_and_index_test.rb deleted file mode 100644 index 8fd770abd1..0000000000 --- a/activerecord/test/cases/migration/table_and_index_test.rb +++ /dev/null @@ -1,24 +0,0 @@ -require "cases/helper" - -module ActiveRecord - class Migration - class TableAndIndexTest < ActiveRecord::TestCase - def test_add_schema_info_respects_prefix_and_suffix - conn = ActiveRecord::Base.connection - - conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name) - # Use shorter prefix and suffix as in Oracle database identifier cannot be larger than 30 characters - ActiveRecord::Base.table_name_prefix = 'p_' - ActiveRecord::Base.table_name_suffix = '_s' - conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name) - - conn.initialize_schema_migrations_table - - assert_equal "p_unique_schema_migrations_s", conn.indexes(ActiveRecord::Migrator.schema_migrations_table_name)[0][:name] - ensure - ActiveRecord::Base.table_name_prefix = "" - ActiveRecord::Base.table_name_suffix = "" - end - end - end -end diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb index c155f29973..60e5a29965 100644 --- a/activerecord/test/cases/migration_test.rb +++ b/activerecord/test/cases/migration_test.rb @@ -59,12 +59,21 @@ class MigrationTest < ActiveRecord::TestCase def test_migrator_versions migrations_path = MIGRATIONS_ROOT + "/valid" ActiveRecord::Migrator.migrations_paths = migrations_path + m0_path = File.join(migrations_path, "1_valid_people_have_last_names.rb") + m0_fingerprint = Digest::MD5.hexdigest(File.read(m0_path)) ActiveRecord::Migrator.up(migrations_path) assert_equal 3, ActiveRecord::Migrator.current_version assert_equal 3, ActiveRecord::Migrator.last_version assert_equal false, ActiveRecord::Migrator.needs_migration? + rows = connection.select_all("SELECT * FROM #{connection.quote_table_name(ActiveRecord::Migrator.schema_migrations_table_name)}") + assert_equal m0_fingerprint, rows[0]["fingerprint"] + assert_equal "valid_people_have_last_names", rows[0]["name"] + rows.each do |row| + assert_match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/, row["migrated_at"], "missing migrated_at") + end + ActiveRecord::Migrator.down(MIGRATIONS_ROOT + "/valid") assert_equal 0, ActiveRecord::Migrator.current_version assert_equal 3, ActiveRecord::Migrator.last_version @@ -337,7 +346,7 @@ class MigrationTest < ActiveRecord::TestCase assert_nothing_raised { Person.connection.create_table :binary_testings do |t| - t.column "data", :binary, :null => false + t.column :data, :binary, :null => false end } diff --git a/activerecord/test/cases/migrator_test.rb b/activerecord/test/cases/migrator_test.rb index 1e16addcf3..0f0384382f 100644 --- a/activerecord/test/cases/migrator_test.rb +++ b/activerecord/test/cases/migrator_test.rb @@ -18,6 +18,9 @@ module ActiveRecord def up; @went_up = true; end def down; @went_down = true; end + # also used in place of a MigrationProxy + def filename; "anon.rb"; end + def fingerprint; "123456789012345678901234567890ab"; end end def setup @@ -102,7 +105,7 @@ module ActiveRecord end def test_finds_pending_migrations - ActiveRecord::SchemaMigration.create!(:version => '1') + ActiveRecord::SchemaMigration.create!(:version => '1', :name => "anon", :migrated_at => Time.now) migration_list = [ Migration.new('foo', 1), Migration.new('bar', 3) ] migrations = ActiveRecord::Migrator.new(:up, migration_list).pending_migrations @@ -152,7 +155,7 @@ module ActiveRecord end def test_current_version - ActiveRecord::SchemaMigration.create!(:version => '1000') + ActiveRecord::SchemaMigration.create!(:version => '1000', :name => "anon", :migrated_at => Time.now) assert_equal 1000, ActiveRecord::Migrator.current_version end @@ -320,7 +323,7 @@ module ActiveRecord def test_only_loads_pending_migrations # migrate up to 1 - ActiveRecord::SchemaMigration.create!(:version => '1') + ActiveRecord::SchemaMigration.create!(:version => '1', :name => "anon", :migrated_at => Time.now) calls, migrator = migrator_class(3) migrator.migrate("valid", nil) diff --git a/activerecord/test/cases/schema_dumper_test.rb b/activerecord/test/cases/schema_dumper_test.rb index 7ff0044bd4..9056b92d65 100644 --- a/activerecord/test/cases/schema_dumper_test.rb +++ b/activerecord/test/cases/schema_dumper_test.rb @@ -1,6 +1,5 @@ require "cases/helper" - class SchemaDumperTest < ActiveRecord::TestCase def setup super @@ -18,11 +17,15 @@ class SchemaDumperTest < ActiveRecord::TestCase def test_dump_schema_information_outputs_lexically_ordered_versions versions = %w{ 20100101010101 20100201010101 20100301010101 } versions.reverse.each do |v| - ActiveRecord::SchemaMigration.create!(:version => v) + ActiveRecord::SchemaMigration.create!( + :version => v, :migrated_at => Time.now, + :fingerprint => "123456789012345678901234567890ab", :name => "anon") end schema_info = ActiveRecord::Base.connection.dump_schema_information assert_match(/20100201010101.*20100301010101/m, schema_info) + target_line = %q{INSERT INTO schema_migrations (version, migrated_at, fingerprint, name) VALUES ('20100101010101',LOCALTIMESTAMP,'123456789012345678901234567890ab','anon');} + assert_match target_line, schema_info end def test_magic_comment @@ -36,6 +39,16 @@ class SchemaDumperTest < ActiveRecord::TestCase assert_no_match %r{create_table "schema_migrations"}, output end + def test_schema_dump_includes_migrations + ActiveRecord::SchemaMigration.delete_all + ActiveRecord::Migrator.migrate(MIGRATIONS_ROOT + "/always_safe") + + output = standard_dump + assert_match %r{migrations do}, output, "Missing migrations block" + assert_match %r{migration 1001, "[0-9a-f]{32}", "always_safe"}, output, "Missing migration line" + assert_match %r{migration 1002, "[0-9a-f]{32}", "still_safe"}, output, "Missing migration line" + end + def test_schema_dump_excludes_sqlite_sequence output = standard_dump assert_no_match %r{create_table "sqlite_sequence"}, output diff --git a/activerecord/test/cases/schema_migration_test.rb b/activerecord/test/cases/schema_migration_test.rb new file mode 100644 index 0000000000..34b9fa520a --- /dev/null +++ b/activerecord/test/cases/schema_migration_test.rb @@ -0,0 +1,54 @@ +require "cases/helper" + +class SchemaMigrationTest < ActiveRecord::TestCase + def sm_table_name + ActiveRecord::SchemaMigration.table_name + end + + def connection + ActiveRecord::Base.connection + end + + def test_add_schema_info_respects_prefix_and_suffix + connection.drop_table(sm_table_name) if connection.table_exists?(sm_table_name) + # Use shorter prefix and suffix as in Oracle database identifier cannot be larger than 30 characters + ActiveRecord::Base.table_name_prefix = 'p_' + ActiveRecord::Base.table_name_suffix = '_s' + connection.drop_table(sm_table_name) if connection.table_exists?(sm_table_name) + + ActiveRecord::SchemaMigration.create_table + + assert_equal "p_unique_schema_migrations_s", connection.indexes(sm_table_name)[0][:name] + ensure + ActiveRecord::Base.table_name_prefix = "" + ActiveRecord::Base.table_name_suffix = "" + end + + def test_add_metadata_columns_to_exisiting_schema_migrations + # creates the old table schema from pre-Rails4.0, so we can test adding to it below + if connection.table_exists?(sm_table_name) + connection.drop_table(sm_table_name) + end + connection.create_table(sm_table_name, :id => false) do |schema_migrations_table| + schema_migrations_table.column("version", :string, :null => false) + end + + connection.insert "INSERT INTO #{connection.quote_table_name(sm_table_name)} (version) VALUES (100)" + connection.insert "INSERT INTO #{connection.quote_table_name(sm_table_name)} (version) VALUES (200)" + + ActiveRecord::SchemaMigration.create_table + + rows = connection.select_all("SELECT * FROM #{connection.quote_table_name(sm_table_name)}") + assert rows[0].has_key?("migrated_at"), "missing column `migrated_at`" + assert_match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/, rows[0]["migrated_at"]) + assert rows[0].has_key?("fingerprint"), "missing column `fingerprint`" + assert rows[0].has_key?("name"), "missing column `name`" + end + + def test_schema_migrations_columns + ActiveRecord::SchemaMigration.create_table + + columns = connection.columns(sm_table_name).collect(&:name) + %w[version migrated_at fingerprint name].each { |col| assert columns.include?(col), "missing column `#{col}`" } + end +end diff --git a/activerecord/test/migrations/always_safe/1001_always_safe.rb b/activerecord/test/migrations/always_safe/1001_always_safe.rb new file mode 100644 index 0000000000..454b972507 --- /dev/null +++ b/activerecord/test/migrations/always_safe/1001_always_safe.rb @@ -0,0 +1,5 @@ +class AlwaysSafe < ActiveRecord::Migration + def change + # do nothing to avoid side-effect conflicts from running multiple times + end +end diff --git a/activerecord/test/migrations/always_safe/1002_still_safe.rb b/activerecord/test/migrations/always_safe/1002_still_safe.rb new file mode 100644 index 0000000000..7398ae27a2 --- /dev/null +++ b/activerecord/test/migrations/always_safe/1002_still_safe.rb @@ -0,0 +1,5 @@ +class StillSafe < ActiveRecord::Migration + def change + # do nothing to avoid side-effect conflicts from running multiple times + end +end |