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/schema_validation/database_spec.rb')
-rw-r--r--spec/lib/gitlab/database/schema_validation/database_spec.rb111
1 files changed, 88 insertions, 23 deletions
diff --git a/spec/lib/gitlab/database/schema_validation/database_spec.rb b/spec/lib/gitlab/database/schema_validation/database_spec.rb
index c0026f91b46..eadaf683a29 100644
--- a/spec/lib/gitlab/database/schema_validation/database_spec.rb
+++ b/spec/lib/gitlab/database/schema_validation/database_spec.rb
@@ -3,43 +3,108 @@
require 'spec_helper'
RSpec.describe Gitlab::Database::SchemaValidation::Database, feature_category: :database do
- let(:database_name) { 'main' }
- let(:database_indexes) do
- [['index', 'CREATE UNIQUE INDEX "index" ON public.achievements USING btree (namespace_id, lower(name))']]
- end
+ subject(:database) { described_class.new(connection) }
- let(:query_result) { instance_double('ActiveRecord::Result', rows: database_indexes) }
- let(:database_model) { Gitlab::Database.database_base_models[database_name] }
+ let(:database_model) { Gitlab::Database.database_base_models['main'] }
let(:connection) { database_model.connection }
- subject(:database) { described_class.new(connection) }
+ context 'when having indexes' do
+ let(:schema_object) { Gitlab::Database::SchemaValidation::SchemaObjects::Index }
+ let(:results) do
+ [['index', 'CREATE UNIQUE INDEX "index" ON public.achievements USING btree (namespace_id, lower(name))']]
+ end
- before do
- allow(connection).to receive(:exec_query).and_return(query_result)
- end
+ before do
+ allow(connection).to receive(:select_rows).and_return(results)
+ end
+
+ describe '#fetch_index_by_name' do
+ context 'when index does not exist' do
+ it 'returns nil' do
+ index = database.fetch_index_by_name('non_existing_index')
+
+ expect(index).to be_nil
+ end
+ end
+
+ it 'returns index by name' do
+ index = database.fetch_index_by_name('index')
+
+ expect(index.name).to eq('index')
+ end
+ end
+
+ describe '#index_exists?' do
+ context 'when index exists' do
+ it 'returns true' do
+ index_exists = database.index_exists?('index')
+
+ expect(index_exists).to be_truthy
+ end
+ end
- describe '#fetch_index_by_name' do
- context 'when index does not exist' do
- it 'returns nil' do
- index = database.fetch_index_by_name('non_existing_index')
+ context 'when index does not exist' do
+ it 'returns false' do
+ index_exists = database.index_exists?('non_existing_index')
- expect(index).to be_nil
+ expect(index_exists).to be_falsey
+ end
end
end
- it 'returns index by name' do
- index = database.fetch_index_by_name('index')
+ describe '#indexes' do
+ it 'returns indexes' do
+ indexes = database.indexes
- expect(index.name).to eq('index')
+ expect(indexes).to all(be_a(schema_object))
+ expect(indexes.map(&:name)).to eq(['index'])
+ end
end
end
- describe '#indexes' do
- it 'returns indexes' do
- indexes = database.indexes
+ context 'when having triggers' do
+ let(:schema_object) { Gitlab::Database::SchemaValidation::SchemaObjects::Trigger }
+ let(:results) do
+ { 'my_trigger' => 'CREATE TRIGGER my_trigger BEFORE INSERT ON todos FOR EACH ROW EXECUTE FUNCTION trigger()' }
+ end
+
+ before do
+ allow(database).to receive(:fetch_triggers).and_return(results)
+ end
+
+ describe '#fetch_trigger_by_name' do
+ context 'when trigger does not exist' do
+ it 'returns nil' do
+ expect(database.fetch_trigger_by_name('non_existing_trigger')).to be_nil
+ end
+ end
+
+ it 'returns trigger by name' do
+ expect(database.fetch_trigger_by_name('my_trigger').name).to eq('my_trigger')
+ end
+ end
+
+ describe '#trigger_exists?' do
+ context 'when trigger exists' do
+ it 'returns true' do
+ expect(database.trigger_exists?('my_trigger')).to be_truthy
+ end
+ end
+
+ context 'when trigger does not exist' do
+ it 'returns false' do
+ expect(database.trigger_exists?('non_existing_trigger')).to be_falsey
+ end
+ end
+ end
- expect(indexes).to all(be_a(Gitlab::Database::SchemaValidation::Index))
- expect(indexes.map(&:name)).to eq(['index'])
+ describe '#triggers' do
+ it 'returns triggers' do
+ triggers = database.triggers
+
+ expect(triggers).to all(be_a(schema_object))
+ expect(triggers.map(&:name)).to eq(['my_trigger'])
+ end
end
end
end