DEV: Less hacky way of rolling back DB changes
Some specs use psql to test database restores and dropping the table after the test needs to happen outside of rspec because of transactions. The previous attempt lead to some changes to be stored in the test database.
This commit is contained in:
parent
68a7ae3091
commit
5e3fc31f2c
|
@ -91,10 +91,10 @@ module BackupRestore
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore_dump_command
|
def restore_dump_command
|
||||||
"#{sed_command} #{@db_dump_path} | #{psql_command} 2>&1"
|
"#{sed_command} #{@db_dump_path} | #{self.class.psql_command} 2>&1"
|
||||||
end
|
end
|
||||||
|
|
||||||
def psql_command
|
def self.psql_command
|
||||||
db_conf = BackupRestore.database_configuration
|
db_conf = BackupRestore.database_configuration
|
||||||
|
|
||||||
password_argument = "PGPASSWORD='#{db_conf.password}'" if db_conf.password.present?
|
password_argument = "PGPASSWORD='#{db_conf.password}'" if db_conf.password.present?
|
||||||
|
|
|
@ -69,17 +69,8 @@ describe BackupRestore::DatabaseRestorer do
|
||||||
|
|
||||||
context "with real psql" do
|
context "with real psql" do
|
||||||
after do
|
after do
|
||||||
DB.exec <<~SQL
|
psql = BackupRestore::DatabaseRestorer.psql_command
|
||||||
-- Drop table and execute a commit to make the drop stick,
|
system("#{psql} -c 'DROP TABLE IF EXISTS foo'", [:out, :err] => File::NULL)
|
||||||
-- otherwise rspec will rollback the drop at the end of each test.
|
|
||||||
-- The tests in this context do not change the DB, so this should be safe.
|
|
||||||
DROP TABLE IF EXISTS foo;
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Start a new transaction in order to suppress the
|
|
||||||
-- "there is no transaction in progress" warnings from rspec.
|
|
||||||
BEGIN TRANSACTION;
|
|
||||||
SQL
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore(filename, stub_migrate: true)
|
def restore(filename, stub_migrate: true)
|
||||||
|
|
Loading…
Reference in New Issue