summaryrefslogtreecommitdiff
path: root/spec/workers
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2018-04-10 10:25:59 +0000
committerSean McGivern <sean@mcgivern.me.uk>2018-04-10 10:25:59 +0000
commit33a4439e8f079303fcf7c71267936e5c8f694958 (patch)
tree828c3c6dc55058e95927d36a3a03db9fd0263766 /spec/workers
parent2db218f8bf186c509c927ce3e9d0502fee4f8349 (diff)
parent174950b6562226beed7eef135a2450bfee60e21f (diff)
downloadgitlab-ce-33a4439e8f079303fcf7c71267936e5c8f694958.tar.gz
Merge branch 'master' into 'stuartnelson3/gitlab-ce-stn/issue-due-email'
# Conflicts: # db/schema.rb
Diffstat (limited to 'spec/workers')
-rw-r--r--spec/workers/concerns/waitable_worker_spec.rb6
-rw-r--r--spec/workers/project_export_worker_spec.rb28
-rw-r--r--spec/workers/repository_fork_worker_spec.rb101
3 files changed, 95 insertions, 40 deletions
diff --git a/spec/workers/concerns/waitable_worker_spec.rb b/spec/workers/concerns/waitable_worker_spec.rb
index 4af0de86ac9..54ab07981a4 100644
--- a/spec/workers/concerns/waitable_worker_spec.rb
+++ b/spec/workers/concerns/waitable_worker_spec.rb
@@ -14,6 +14,12 @@ describe WaitableWorker do
include ApplicationWorker
prepend WaitableWorker
+ # This is a workaround for a Ruby 2.3.7 bug. rspec-mocks cannot restore
+ # the visibility of prepended modules. See
+ # https://github.com/rspec/rspec-mocks/issues/1231 for more details.
+ def self.bulk_perform_inline(args_list)
+ end
+
def perform(i = 0)
self.class.counter += i
end
diff --git a/spec/workers/project_export_worker_spec.rb b/spec/workers/project_export_worker_spec.rb
new file mode 100644
index 00000000000..8899969c178
--- /dev/null
+++ b/spec/workers/project_export_worker_spec.rb
@@ -0,0 +1,28 @@
+require 'spec_helper'
+
+describe ProjectExportWorker do
+ let!(:user) { create(:user) }
+ let!(:project) { create(:project) }
+
+ subject { described_class.new }
+
+ describe '#perform' do
+ context 'when it succeeds' do
+ it 'calls the ExportService' do
+ expect_any_instance_of(::Projects::ImportExport::ExportService).to receive(:execute)
+
+ subject.perform(user.id, project.id, { 'klass' => 'Gitlab::ImportExport::AfterExportStrategies::DownloadNotificationStrategy' })
+ end
+ end
+
+ context 'when it fails' do
+ it 'raises an exception when params are invalid' do
+ expect_any_instance_of(::Projects::ImportExport::ExportService).not_to receive(:execute)
+
+ expect { subject.perform(1234, project.id, {}) }.to raise_exception(ActiveRecord::RecordNotFound)
+ expect { subject.perform(user.id, 1234, {}) }.to raise_exception(ActiveRecord::RecordNotFound)
+ expect { subject.perform(user.id, project.id, { 'klass' => 'Whatever' }) }.to raise_exception(Gitlab::ImportExport::AfterExportStrategyBuilder::StrategyNotFoundError)
+ end
+ end
+ end
+end
diff --git a/spec/workers/repository_fork_worker_spec.rb b/spec/workers/repository_fork_worker_spec.rb
index 6c66658d8c3..4b3c1736ea0 100644
--- a/spec/workers/repository_fork_worker_spec.rb
+++ b/spec/workers/repository_fork_worker_spec.rb
@@ -9,70 +9,91 @@ describe RepositoryForkWorker do
describe "#perform" do
let(:project) { create(:project, :repository) }
- let(:fork_project) { create(:project, :repository, :import_scheduled, forked_from_project: project) }
let(:shell) { Gitlab::Shell.new }
+ let(:fork_project) { create(:project, :repository, :import_scheduled, forked_from_project: project) }
- before do
- allow(subject).to receive(:gitlab_shell).and_return(shell)
- end
+ shared_examples 'RepositoryForkWorker performing' do
+ before do
+ allow(subject).to receive(:gitlab_shell).and_return(shell)
+ end
- def perform!
- subject.perform(fork_project.id, '/test/path', project.disk_path)
- end
+ def expect_fork_repository
+ expect(shell).to receive(:fork_repository).with(
+ 'default',
+ project.disk_path,
+ fork_project.repository_storage,
+ fork_project.disk_path
+ )
+ end
- def expect_fork_repository
- expect(shell).to receive(:fork_repository).with(
- '/test/path',
- project.disk_path,
- fork_project.repository_storage_path,
- fork_project.disk_path
- )
- end
+ describe 'when a worker was reset without cleanup' do
+ let(:jid) { '12345678' }
- describe 'when a worker was reset without cleanup' do
- let(:jid) { '12345678' }
+ it 'creates a new repository from a fork' do
+ allow(subject).to receive(:jid).and_return(jid)
- it 'creates a new repository from a fork' do
- allow(subject).to receive(:jid).and_return(jid)
+ expect_fork_repository.and_return(true)
+ perform!
+ end
+ end
+
+ it "creates a new repository from a fork" do
expect_fork_repository.and_return(true)
perform!
end
- end
- it "creates a new repository from a fork" do
- expect_fork_repository.and_return(true)
+ it 'protects the default branch' do
+ expect_fork_repository.and_return(true)
- perform!
- end
+ perform!
+
+ expect(fork_project.protected_branches.first.name).to eq(fork_project.default_branch)
+ end
+
+ it 'flushes various caches' do
+ expect_fork_repository.and_return(true)
- it 'protects the default branch' do
- expect_fork_repository.and_return(true)
+ expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
+ .and_call_original
- perform!
+ expect_any_instance_of(Repository).to receive(:expire_exists_cache)
+ .and_call_original
- expect(fork_project.protected_branches.first.name).to eq(fork_project.default_branch)
- end
+ perform!
+ end
+
+ it "handles bad fork" do
+ error_message = "Unable to fork project #{fork_project.id} for repository #{project.disk_path} -> #{fork_project.disk_path}"
- it 'flushes various caches' do
- expect_fork_repository.and_return(true)
+ expect_fork_repository.and_return(false)
- expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
- .and_call_original
+ expect { perform! }.to raise_error(StandardError, error_message)
+ end
+ end
- expect_any_instance_of(Repository).to receive(:expire_exists_cache)
- .and_call_original
+ context 'only project ID passed' do
+ def perform!
+ subject.perform(fork_project.id)
+ end
- perform!
+ it_behaves_like 'RepositoryForkWorker performing'
end
- it "handles bad fork" do
- error_message = "Unable to fork project #{fork_project.id} for repository #{project.disk_path} -> #{fork_project.disk_path}"
+ context 'project ID, storage and repo paths passed' do
+ def perform!
+ subject.perform(fork_project.id, TestEnv.repos_path, project.disk_path)
+ end
- expect_fork_repository.and_return(false)
+ it_behaves_like 'RepositoryForkWorker performing'
- expect { perform! }.to raise_error(StandardError, error_message)
+ it 'logs a message about forking with old-style arguments' do
+ allow(Rails.logger).to receive(:info).with(anything) # To compensate for other logs
+ expect(Rails.logger).to receive(:info).with("Project #{fork_project.id} is being forked using old-style arguments.")
+
+ perform!
+ end
end
end
end