From 5e3fc31f2c13d335dc92c9dd684ff4c7fa254da9 Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Wed, 15 Jan 2020 23:37:21 +0100 Subject: [PATCH] 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. --- lib/backup_restore/database_restorer.rb | 4 ++-- spec/lib/backup_restore/database_restorer_spec.rb | 13 ++----------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/lib/backup_restore/database_restorer.rb b/lib/backup_restore/database_restorer.rb index 033f8758d13..1e2c65504ac 100644 --- a/lib/backup_restore/database_restorer.rb +++ b/lib/backup_restore/database_restorer.rb @@ -91,10 +91,10 @@ module BackupRestore end 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 - def psql_command + def self.psql_command db_conf = BackupRestore.database_configuration password_argument = "PGPASSWORD='#{db_conf.password}'" if db_conf.password.present? diff --git a/spec/lib/backup_restore/database_restorer_spec.rb b/spec/lib/backup_restore/database_restorer_spec.rb index e4c4d6cb13c..5f595522d94 100644 --- a/spec/lib/backup_restore/database_restorer_spec.rb +++ b/spec/lib/backup_restore/database_restorer_spec.rb @@ -69,17 +69,8 @@ describe BackupRestore::DatabaseRestorer do context "with real psql" do after do - DB.exec <<~SQL - -- Drop table and execute a commit to make the drop stick, - -- 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 + psql = BackupRestore::DatabaseRestorer.psql_command + system("#{psql} -c 'DROP TABLE IF EXISTS foo'", [:out, :err] => File::NULL) end def restore(filename, stub_migrate: true)