Fix the schema load test

And added changelog
This commit is contained in:
DJ Mountney 2018-09-12 15:55:26 -07:00
parent 76cfe4f1fd
commit 60747672bb
2 changed files with 20 additions and 11 deletions

View file

@ -0,0 +1,5 @@
---
title: Ensure the schema is loaded with post_migrations included
merge_request:
author:
type: changed

View file

@ -63,31 +63,35 @@ describe 'gitlab:db namespace rake task' do
end end
context 'SKIP_POST_DEPLOYMENT_MIGRATIONS environment variable set' do context 'SKIP_POST_DEPLOYMENT_MIGRATIONS environment variable set' do
let :migrations_paths do let(:rails_paths) { { 'db' => ['db'], 'db/migrate' => ['db/migrate'] } }
root = Rails::Paths::Root.new(Rails.root)
root.add('db/migrate')
end
before do before do
allow(ENV).to receive(:[]).and_call_original allow(ENV).to receive(:[]).and_call_original
allow(ENV).to receive(:[]).with('SKIP_POST_DEPLOYMENT_MIGRATIONS').and_return true allow(ENV).to receive(:[]).with('SKIP_POST_DEPLOYMENT_MIGRATIONS').and_return true
# Our environment has already been loaded, so we need to pretent like post_migrations were not # Our environment has already been loaded, so we need to pretend like post_migrations were not
allow(Rails.application.config.paths).to receive(:[]).and_call_original allow(Rails.application.config).to receive(:paths).and_return(rails_paths)
allow(Rails.application.config.paths).to receive(:[]).with('db/migrate').and_return(migrations_paths) allow(ActiveRecord::Migrator).to receive(:migrations_paths).and_return(rails_paths['db/migrate'].dup)
allow(ActiveRecord::Migrator).to receive(:migrations_paths).and_return(migrations_paths)
end end
it 'adds post deployment migrations before schema load if the schema is not already loaded' do it 'adds post deployment migrations before schema load if the schema is not already loaded' do
allow(ActiveRecord::Base.connection).to receive(:tables).and_return([]) allow(ActiveRecord::Base.connection).to receive(:tables).and_return([])
expect(Gitlab::Database).to receive(:add_post_migrate_path_to_rails) expect(Gitlab::Database).to receive(:add_post_migrate_path_to_rails).and_call_original
expect(Rake::Task['db:schema:load']).to receive(:invoke) expect(Rake::Task['db:schema:load']).to receive(:invoke)
expect(Rake::Task['db:seed_fu']).to receive(:invoke) expect(Rake::Task['db:seed_fu']).to receive(:invoke)
expect(Rake::Task['db:migrate']).not_to receive(:invoke) expect(Rake::Task['db:migrate']).not_to receive(:invoke)
expect(Rails.application.config.paths).to receive(:[]).with('db/migrate')
expect { run_rake_task('gitlab:db:configure') }.not_to raise_error expect { run_rake_task('gitlab:db:configure') }.not_to raise_error
expect(rails_paths['db/migrate'].include?(File.join(Rails.root, 'db', 'post_migrate'))).to be(true)
end
expect(migrations_paths.include?(File.join(Rails.root, 'db', 'post_migrate'))).to be(true) it 'ignores post deployment migrations when schema has already been loaded' do
allow(ActiveRecord::Base.connection).to receive(:tables).and_return(%w[table1 table2])
expect(Rake::Task['db:migrate']).to receive(:invoke)
expect(Gitlab::Database).not_to receive(:add_post_migrate_path_to_rails)
expect(Rake::Task['db:schema:load']).not_to receive(:invoke)
expect(Rake::Task['db:seed_fu']).not_to receive(:invoke)
expect { run_rake_task('gitlab:db:configure') }.not_to raise_error
expect(rails_paths['db/migrate'].include?(File.join(Rails.root, 'db', 'post_migrate'))).to be(false)
end end
end end
end end