提交 0d8d64e9 编写于 作者: E eileencodes

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.
上级 4abd389e
......@@ -232,6 +232,10 @@ def change
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 @@ def test_add_foreign_key_is_reversible
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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册