Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/database/migration_helpers_spec.rb')
-rw-r--r--spec/lib/gitlab/database/migration_helpers_spec.rb74
1 files changed, 69 insertions, 5 deletions
diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb
index dd0033bbc14..94e7b0d863d 100644
--- a/spec/lib/gitlab/database/migration_helpers_spec.rb
+++ b/spec/lib/gitlab/database/migration_helpers_spec.rb
@@ -576,6 +576,12 @@ describe Gitlab::Database::MigrationHelpers do
end
describe '#add_column_with_default' do
+ let(:table_has_rows) { true }
+
+ before do
+ allow(model).to receive(:has_rows?).and_return(table_has_rows)
+ end
+
context 'outside of a transaction' do
context 'when a column limit is not set' do
before do
@@ -675,14 +681,72 @@ describe Gitlab::Database::MigrationHelpers do
end
context 'inside a transaction' do
- it 'raises RuntimeError' do
- expect(model).to receive(:transaction_open?).and_return(true)
+ subject do
+ -> { model.add_column_with_default(:projects, :foo, :integer, default: 10) }
+ end
- expect do
- model.add_column_with_default(:projects, :foo, :integer, default: 10)
- end.to raise_error(RuntimeError)
+ context 'the table has rows' do
+ before do
+ expect(model).to receive(:transaction_open?).and_return(true)
+ end
+
+ it { is_expected.to raise_error(RuntimeError) }
+ end
+
+ context 'the table has no rows' do
+ let(:table_has_rows) { false }
+
+ it { is_expected.not_to raise_error(RuntimeError) }
+ end
+ end
+ end
+
+ describe '#has_rows?' do
+ let(:table_name) { :spec_has_rows_test }
+
+ before do
+ model.create_table(table_name) do |t|
+ t.integer :foo
+ t.text :bar
+ end
+ end
+
+ after do
+ model.drop_table table_name
+ end
+
+ subject { model.has_rows? table_name }
+
+ context 'there are no rows' do
+ it { is_expected.to be_falsey }
+ end
+
+ def insert_rows(*rows)
+ table = Arel::Table.new(table_name)
+ rows.each do |foo:, bar:|
+ stm = table.create_insert.insert([
+ [table[:foo], foo],
+ [table[:bar], bar]
+ ])
+ ActiveRecord::Base.connection.insert(stm.to_sql)
end
end
+
+ context 'there is one row' do
+ before do
+ insert_rows(foo: 1, bar: 'wibble')
+ end
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'there are several rows' do
+ before do
+ insert_rows(*(1..3).map { |i| { foo: i, bar: "wibble-#{i}" } })
+ end
+
+ it { is_expected.to be_truthy }
+ end
end
describe '#rename_column_concurrently' do