mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
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.
This commit is contained in:
parent
4abd389ef7
commit
0d8d64e9d0
1 changed files with 13 additions and 0 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue