diff options
author | eileencodes <eileencodes@gmail.com> | 2016-07-01 11:38:38 -0400 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2016-07-01 11:43:46 -0400 |
commit | 0d8d64e9d09cf37ae302fed17f5cd872b4053a4f (patch) | |
tree | e1acaed336fb260ddfcf34cd0d14c2fe991f3272 /activerecord/test | |
parent | 4abd389ef77cf8f8b45793451c6d4429ca08062e (diff) | |
download | rails-0d8d64e9d09cf37ae302fed17f5cd872b4053a4f.tar.gz rails-0d8d64e9d09cf37ae302fed17f5cd872b4053a4f.tar.bz2 rails-0d8d64e9d09cf37ae302fed17f5cd872b4053a4f.zip |
Add regression test for foreign key schema dump caching
If you had a foreign key set and then decided to add `on_delete:
:cascade` later in another migration that migration would run but
wouldn't refresh the schema dump.
The reason for this was because `create_table_info` caches the statement
and sets it to be the same as the original declaration for the foreign
key (without the `on_delete: :cascade`.
PR #25307 ended up fixing this bug because it removes the check for
`create_table_info` and relies on reading from `information_schema`. The
fix however was intended to patch another bug. The reason this fixes the
issue is we're no longer parsing the regex from the cached
`create_table_info`.
This regression test is to ensure that the issue does not return if we
for some reason go back to using `create_table_info` to set the foreign
keys.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/migration/foreign_key_test.rb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/activerecord/test/cases/migration/foreign_key_test.rb b/activerecord/test/cases/migration/foreign_key_test.rb index 01162dcefe..49a8fa241f 100644 --- a/activerecord/test/cases/migration/foreign_key_test.rb +++ b/activerecord/test/cases/migration/foreign_key_test.rb @@ -232,6 +232,10 @@ module ActiveRecord t.column :city_id, :integer end add_foreign_key :houses, :cities, column: "city_id" + + # remove and re-add to test that schema is updated and not accidently cached + remove_foreign_key :houses, :cities + add_foreign_key :houses, :cities, column: "city_id", on_delete: :cascade end end @@ -243,6 +247,15 @@ module ActiveRecord silence_stream($stdout) { migration.migrate(:down) } end + def test_foreign_key_constraint_is_not_cached_incorrectly + migration = CreateCitiesAndHousesMigration.new + silence_stream($stdout) { migration.migrate(:up) } + output = dump_table_schema "houses" + assert_match %r{\s+add_foreign_key "houses",.+on_delete: :cascade$}, output + ensure + silence_stream($stdout) { migration.migrate(:down) } + end + class CreateSchoolsAndClassesMigration < ActiveRecord::Migration::Current def change create_table(:schools) |