Files
gitlab-foss/spec/lib/gitlab/database/migrations/swap_columns_spec.rb
2023-10-18 12:10:46 +00:00

65 lines
1.7 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Database::Migrations::SwapColumns, feature_category: :database do
describe '#execute' do
let(:connection) { ApplicationRecord.connection }
let(:sql) do
<<~SQL
CREATE TABLE #{table} (
id integer NOT NULL,
#{column1} integer DEFAULT 8 NOT NULL,
#{column2} bigint DEFAULT 100 NOT NULL
);
SQL
end
let(:migration_context) do
Gitlab::Database::Migration[2.1]
.new('name', 'version')
.extend(Gitlab::Database::MigrationHelpers::Swapping)
end
let(:table) { :_test_swap_columns_and_defaults }
let(:column1) { :integer_column }
let(:column2) { :bigint_column }
subject(:execute_service) do
described_class.new(
migration_context: migration_context,
table: table,
column1: column1,
column2: column2
).execute
end
before do
connection.execute(sql)
end
shared_examples_for 'swapping columns correctly' do
specify do
expect { execute_service }
.to change { find_column_by(column1).sql_type }.from('integer').to('bigint')
.and change { find_column_by(column2).sql_type }.from('bigint').to('integer')
end
end
it_behaves_like 'swapping columns correctly'
context 'when column names are 63 bytes' do
let(:column1) { :int012345678901234567890123456789012345678901234567890123456789 }
let(:column2) { :big012345678901234567890123456789012345678901234567890123456789 }
it_behaves_like 'swapping columns correctly'
end
private
def find_column_by(name)
connection.columns(table).find { |c| c.name == name.to_s }
end
end
end