diff options
Diffstat (limited to 'spec/workers/repository_fork_worker_spec.rb')
-rw-r--r-- | spec/workers/repository_fork_worker_spec.rb | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/spec/workers/repository_fork_worker_spec.rb b/spec/workers/repository_fork_worker_spec.rb index 3a5528b6a04..bd452c21d9a 100644 --- a/spec/workers/repository_fork_worker_spec.rb +++ b/spec/workers/repository_fork_worker_spec.rb @@ -19,11 +19,11 @@ RSpec.describe RepositoryForkWorker, feature_category: :source_code_management d fork_project(project, forked_project.creator, target_project: forked_project, repository: true) end - shared_examples 'RepositoryForkWorker performing' do - def expect_fork_repository(success:) + shared_examples 'RepositoryForkWorker performing' do |branch| + def expect_fork_repository(success:, branch:) allow(::Gitlab::GitalyClient::RepositoryService).to receive(:new).and_call_original expect_next_instance_of(::Gitlab::GitalyClient::RepositoryService, forked_project.repository.raw) do |svc| - exp = expect(svc).to receive(:fork_repository).with(project.repository.raw) + exp = expect(svc).to receive(:fork_repository).with(project.repository.raw, branch) if success exp.and_return(true) @@ -39,20 +39,20 @@ RSpec.describe RepositoryForkWorker, feature_category: :source_code_management d it 'creates a new repository from a fork' do allow(subject).to receive(:jid).and_return(jid) - expect_fork_repository(success: true) + expect_fork_repository(success: true, branch: branch) perform! end end it "creates a new repository from a fork" do - expect_fork_repository(success: true) + expect_fork_repository(success: true, branch: branch) perform! end it 'protects the default branch' do - expect_fork_repository(success: true) + expect_fork_repository(success: true, branch: branch) perform! @@ -60,7 +60,7 @@ RSpec.describe RepositoryForkWorker, feature_category: :source_code_management d end it 'flushes various caches' do - expect_fork_repository(success: true) + expect_fork_repository(success: true, branch: branch) # Works around https://github.com/rspec/rspec-mocks/issues/910 expect(Project).to receive(:find).with(forked_project.id).and_return(forked_project) @@ -79,13 +79,13 @@ RSpec.describe RepositoryForkWorker, feature_category: :source_code_management d it 'handles bad fork' do error_message = "Unable to fork project #{forked_project.id} for repository #{project.disk_path} -> #{forked_project.disk_path}: Failed to create fork repository" - expect_fork_repository(success: false) + expect_fork_repository(success: false, branch: branch) expect { perform! }.to raise_error(StandardError, error_message) end it 'calls Projects::LfsPointers::LfsLinkService#execute with OIDs of source project LFS objects' do - expect_fork_repository(success: true) + expect_fork_repository(success: true, branch: branch) expect_next_instance_of(Projects::LfsPointers::LfsLinkService) do |service| expect(service).to receive(:execute).with(project.lfs_objects_oids) end @@ -96,7 +96,7 @@ RSpec.describe RepositoryForkWorker, feature_category: :source_code_management d it "handles LFS objects link failure" do error_message = "Unable to fork project #{forked_project.id} for repository #{project.disk_path} -> #{forked_project.disk_path}: Source project has too many LFS objects" - expect_fork_repository(success: true) + expect_fork_repository(success: true, branch: branch) expect_next_instance_of(Projects::LfsPointers::LfsLinkService) do |service| expect(service).to receive(:execute).and_raise(Projects::LfsPointers::LfsLinkService::TooManyOidsError) end @@ -113,6 +113,16 @@ RSpec.describe RepositoryForkWorker, feature_category: :source_code_management d it_behaves_like 'RepositoryForkWorker performing' end + context 'when a specific branch is requested' do + def perform! + forked_project.create_import_data(data: { fork_branch: 'wip' }) + + subject.perform(forked_project.id) + end + + it_behaves_like 'RepositoryForkWorker performing', 'wip' + end + context 'project ID, storage and repo paths passed' do def perform! subject.perform(forked_project.id, 'repos/path', project.disk_path) |