summaryrefslogtreecommitdiff
path: root/spec/workers/repository_fork_worker_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/workers/repository_fork_worker_spec.rb')
-rw-r--r--spec/workers/repository_fork_worker_spec.rb98
1 files changed, 56 insertions, 42 deletions
diff --git a/spec/workers/repository_fork_worker_spec.rb b/spec/workers/repository_fork_worker_spec.rb
index 6c66658d8c3..1a34868fa40 100644
--- a/spec/workers/repository_fork_worker_spec.rb
+++ b/spec/workers/repository_fork_worker_spec.rb
@@ -8,71 +8,85 @@ describe RepositoryForkWorker do
end
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 }
+ shared_examples 'RepositoryForkWorker performing' do
+ let(:project) { create(:project, :repository) }
+ let(:fork_project) { create(:project, :repository, :import_scheduled, forked_from_project: project) }
+ let(:shell) { Gitlab::Shell.new }
- before do
- allow(subject).to receive(:gitlab_shell).and_return(shell)
- end
+ 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!
- it 'protects the default branch' do
- expect_fork_repository.and_return(true)
+ expect(fork_project.protected_branches.first.name).to eq(fork_project.default_branch)
+ end
- perform!
+ it 'flushes various caches' do
+ expect_fork_repository.and_return(true)
- expect(fork_project.protected_branches.first.name).to eq(fork_project.default_branch)
- end
+ expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
+ .and_call_original
- it 'flushes various caches' do
- expect_fork_repository.and_return(true)
+ expect_any_instance_of(Repository).to receive(:expire_exists_cache)
+ .and_call_original
+
+ perform!
+ end
- expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
- .and_call_original
+ it "handles bad fork" do
+ error_message = "Unable to fork project #{fork_project.id} for repository #{project.disk_path} -> #{fork_project.disk_path}"
- expect_any_instance_of(Repository).to receive(:expire_exists_cache)
- .and_call_original
+ expect_fork_repository.and_return(false)
- perform!
+ expect { perform! }.to raise_error(StandardError, error_message)
+ end
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 'only project ID passed' do
+ def perform!
+ subject.perform(fork_project.id)
+ end
- expect_fork_repository.and_return(false)
+ it_behaves_like 'RepositoryForkWorker performing'
+ end
+
+ context 'project ID, storage and repo paths passed' do
+ def perform!
+ subject.perform(fork_project.id, TestEnv.repos_path, project.disk_path)
+ end
- expect { perform! }.to raise_error(StandardError, error_message)
+ it_behaves_like 'RepositoryForkWorker performing'
end
end
end