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/models')
-rw-r--r--spec/models/application_record_spec.rb42
-rw-r--r--spec/models/project_services/chat_notification_service_spec.rb26
-rw-r--r--spec/models/repository_spec.rb64
3 files changed, 126 insertions, 6 deletions
diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb
index 24de46cb536..85a6717d259 100644
--- a/spec/models/application_record_spec.rb
+++ b/spec/models/application_record_spec.rb
@@ -132,5 +132,47 @@ RSpec.describe ApplicationRecord do
end.to raise_error(ActiveRecord::QueryCanceled)
end
end
+
+ context 'with database load balancing' do
+ let(:session) { double(:session) }
+
+ before do
+ allow(::Gitlab::Database::LoadBalancing::Session).to receive(:current).and_return(session)
+ allow(session).to receive(:fallback_to_replicas_for_ambiguous_queries).and_yield
+ end
+
+ it 'yields control' do
+ expect do |blk|
+ described_class.with_fast_read_statement_timeout(&blk)
+ end.to yield_control.once
+ end
+
+ context 'when the query runs faster than configured timeout' do
+ it 'executes the query without error' do
+ result = nil
+
+ expect do
+ described_class.with_fast_read_statement_timeout(100) do
+ result = described_class.connection.exec_query('SELECT 1')
+ end
+ end.not_to raise_error
+
+ expect(result).not_to be_nil
+ end
+ end
+
+ # This query hangs for 10ms and then gets cancelled. As there is no
+ # other way to test the timeout for sure, 10ms of waiting seems to be
+ # reasonable!
+ context 'when the query runs longer than configured timeout' do
+ it 'cancels the query and raiss an exception' do
+ expect do
+ described_class.with_fast_read_statement_timeout(10) do
+ described_class.connection.exec_query('SELECT pg_sleep(0.1)')
+ end
+ end.to raise_error(ActiveRecord::QueryCanceled)
+ end
+ end
+ end
end
end
diff --git a/spec/models/project_services/chat_notification_service_spec.rb b/spec/models/project_services/chat_notification_service_spec.rb
index 62f97873a06..192b1df33b5 100644
--- a/spec/models/project_services/chat_notification_service_spec.rb
+++ b/spec/models/project_services/chat_notification_service_spec.rb
@@ -89,12 +89,6 @@ RSpec.describe ChatNotificationService do
let(:data) { Gitlab::DataBuilder::Note.build(note, user) }
- it 'notifies the chat service' do
- expect(chat_service).to receive(:notify).with(any_args)
-
- chat_service.execute(data)
- end
-
shared_examples 'notifies the chat service' do
specify do
expect(chat_service).to receive(:notify).with(any_args)
@@ -111,6 +105,26 @@ RSpec.describe ChatNotificationService do
end
end
+ it_behaves_like 'notifies the chat service'
+
+ context 'with label filter' do
+ subject(:chat_service) { described_class.new(labels_to_be_notified: '~Bug') }
+
+ it_behaves_like 'notifies the chat service'
+
+ context 'MergeRequest events' do
+ let(:data) { create(:merge_request, labels: [label]).to_hook_data(user) }
+
+ it_behaves_like 'notifies the chat service'
+ end
+
+ context 'Issue events' do
+ let(:data) { issue.to_hook_data(user) }
+
+ it_behaves_like 'notifies the chat service'
+ end
+ end
+
context 'when labels_to_be_notified_behavior is not defined' do
subject(:chat_service) { described_class.new(labels_to_be_notified: label_filter) }
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 7748846f6a5..b6f09babb4b 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1123,6 +1123,70 @@ RSpec.describe Repository do
end
end
+ describe '#fetch_as_mirror' do
+ let(:url) { "http://example.com" }
+
+ context 'when :fetch_remote_params is enabled' do
+ let(:remote_name) { "remote-name" }
+
+ before do
+ stub_feature_flags(fetch_remote_params: true)
+ end
+
+ it 'fetches the URL without creating a remote' do
+ expect(repository).not_to receive(:add_remote)
+ expect(repository)
+ .to receive(:fetch_remote)
+ .with(remote_name, url: url, forced: false, prune: true, refmap: :all_refs)
+ .and_return(nil)
+
+ repository.fetch_as_mirror(url, remote_name: remote_name)
+ end
+ end
+
+ context 'when :fetch_remote_params is disabled' do
+ before do
+ stub_feature_flags(fetch_remote_params: false)
+ end
+
+ shared_examples 'a fetch' do
+ it 'adds and fetches a remote' do
+ expect(repository)
+ .to receive(:add_remote)
+ .with(expected_remote, url, mirror_refmap: :all_refs)
+ .and_return(nil)
+ expect(repository)
+ .to receive(:fetch_remote)
+ .with(expected_remote, forced: false, prune: true)
+ .and_return(nil)
+
+ repository.fetch_as_mirror(url, remote_name: remote_name)
+ end
+ end
+
+ context 'with temporary remote' do
+ let(:remote_name) { nil }
+ let(:expected_remote_suffix) { "123456" }
+ let(:expected_remote) { "tmp-#{expected_remote_suffix}" }
+
+ before do
+ expect(repository)
+ .to receive(:async_remove_remote).with(expected_remote).and_return(nil)
+ allow(SecureRandom).to receive(:hex).and_return(expected_remote_suffix)
+ end
+
+ it_behaves_like 'a fetch'
+ end
+
+ context 'with remote name' do
+ let(:remote_name) { "foo" }
+ let(:expected_remote) { "foo" }
+
+ it_behaves_like 'a fetch'
+ end
+ end
+ end
+
describe '#fetch_ref' do
let(:broken_repository) { create(:project, :broken_storage).repository }