fix deploy problems due to renamed table

This commit is contained in:
Neil Lalonde
2017-05-12 15:01:43 -04:00
parent ff6b9aee47
commit 8b9799507c
4 changed files with 154 additions and 0 deletions

View File

@ -0,0 +1,66 @@
require 'rails_helper'
require 'table_migration_helper'
describe TableMigrationHelper do
def table_exists?(table_name)
sql = <<-SQL
SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'public' AND
table_name = '#{table_name}'
SQL
ActiveRecord::Base.exec_sql(sql).to_a.length > 0
end
describe '#delayed_drop' do
it "can drop a table after correct delay and when new table exists" do
ActiveRecord::Base.exec_sql "CREATE TABLE table_with_old_name (topic_id INTEGER)"
name = ActiveRecord::Base
.exec_sql("SELECT name FROM schema_migration_details LIMIT 1")
.getvalue(0,0)
Topic.exec_sql("UPDATE schema_migration_details SET created_at = :created_at WHERE name = :name",
name: name, created_at: 15.minutes.ago)
dropped_proc_called = false
described_class.delayed_drop(
old_name: 'table_with_old_name',
new_name: 'table_with_new_name',
after_migration: name,
delay: 20.minutes,
on_drop: ->(){dropped_proc_called = true}
)
expect(table_exists?('table_with_old_name')).to eq(true)
expect(dropped_proc_called).to eq(false)
described_class.delayed_drop(
old_name: 'table_with_old_name',
new_name: 'table_with_new_name',
after_migration: name,
delay: 10.minutes,
on_drop: ->(){dropped_proc_called = true}
)
expect(table_exists?('table_with_old_name')).to eq(true)
expect(dropped_proc_called).to eq(false)
ActiveRecord::Base.exec_sql "CREATE TABLE table_with_new_name (topic_id INTEGER)"
described_class.delayed_drop(
old_name: 'table_with_old_name',
new_name: 'table_with_new_name',
after_migration: name,
delay: 10.minutes,
on_drop: ->(){dropped_proc_called = true}
)
expect(table_exists?('table_with_old_name')).to eq(false)
expect(dropped_proc_called).to eq(true)
end
end
end