Commit 60747672 authored by DJ Mountney's avatar DJ Mountney

Fix the schema load test

And added changelog
parent 76cfe4f1
---
title: Ensure the schema is loaded with post_migrations included
merge_request:
author:
type: changed
...@@ -63,31 +63,35 @@ describe 'gitlab:db namespace rake task' do ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment