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:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-03 21:06:49 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-03 21:06:49 +0300
commitab7cf450ba19cf80b9534f25dc707b33845e3014 (patch)
treebbfa6aba83c48aea68d79c4179ce576b6eec326d /spec/services/branches
parent4204cf308596e0e26f578a6e2da88f49c0f4aad9 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/branches')
-rw-r--r--spec/services/branches/create_service_spec.rb41
-rw-r--r--spec/services/branches/delete_merged_service_spec.rb84
-rw-r--r--spec/services/branches/delete_service_spec.rb47
-rw-r--r--spec/services/branches/validate_new_service_spec.rb40
4 files changed, 212 insertions, 0 deletions
diff --git a/spec/services/branches/create_service_spec.rb b/spec/services/branches/create_service_spec.rb
new file mode 100644
index 00000000000..444491ed6f3
--- /dev/null
+++ b/spec/services/branches/create_service_spec.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Branches::CreateService do
+ let(:user) { create(:user) }
+ subject(:service) { described_class.new(project, user) }
+
+ describe '#execute' do
+ context 'when repository is empty' do
+ let(:project) { create(:project_empty_repo) }
+
+ it 'creates master branch' do
+ service.execute('my-feature', 'master')
+
+ expect(project.repository.branch_exists?('master')).to be_truthy
+ end
+
+ it 'creates my-feature branch' do
+ service.execute('my-feature', 'master')
+
+ expect(project.repository.branch_exists?('my-feature')).to be_truthy
+ end
+ end
+
+ context 'when creating a branch fails' do
+ let(:project) { create(:project_empty_repo) }
+
+ before do
+ allow(project.repository).to receive(:add_branch).and_return(false)
+ end
+
+ it 'returns an error with the branch name' do
+ result = service.execute('my-feature', 'master')
+
+ expect(result[:status]).to eq(:error)
+ expect(result[:message]).to eq("Invalid reference name: my-feature")
+ end
+ end
+ end
+end
diff --git a/spec/services/branches/delete_merged_service_spec.rb b/spec/services/branches/delete_merged_service_spec.rb
new file mode 100644
index 00000000000..962af8110f7
--- /dev/null
+++ b/spec/services/branches/delete_merged_service_spec.rb
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Branches::DeleteMergedService do
+ include ProjectForksHelper
+
+ subject(:service) { described_class.new(project, project.owner) }
+
+ let(:project) { create(:project, :repository) }
+
+ context '#execute' do
+ it 'deletes a branch that was merged' do
+ service.execute
+
+ expect(project.repository.branch_names).not_to include('improve/awesome')
+ end
+
+ it 'keeps branch that is unmerged' do
+ service.execute
+
+ expect(project.repository.branch_names).to include('feature')
+ end
+
+ it 'keeps "master"' do
+ service.execute
+
+ expect(project.repository.branch_names).to include('master')
+ end
+
+ it 'keeps protected branches' do
+ create(:protected_branch, project: project, name: 'improve/awesome')
+
+ service.execute
+
+ expect(project.repository.branch_names).to include('improve/awesome')
+ end
+
+ it 'keeps wildcard protected branches' do
+ create(:protected_branch, project: project, name: 'improve/*')
+
+ service.execute
+
+ expect(project.repository.branch_names).to include('improve/awesome')
+ end
+
+ it 'ignores protected tags' do
+ create(:protected_tag, project: project, name: 'improve/*')
+
+ service.execute
+
+ expect(project.repository.branch_names).not_to include('improve/awesome')
+ end
+
+ context 'user without rights' do
+ let(:user) { create(:user) }
+
+ it 'cannot execute' do
+ expect { described_class.new(project, user).execute }.to raise_error(Gitlab::Access::AccessDeniedError)
+ end
+ end
+
+ context 'open merge requests' do
+ it 'does not delete branches from open merge requests' do
+ forked_project = fork_project(project)
+ create(:merge_request, :opened, source_project: project, target_project: project, source_branch: 'branch-merged', target_branch: 'master')
+ create(:merge_request, :opened, source_project: forked_project, target_project: project, target_branch: 'improve/awesome', source_branch: 'master')
+
+ service.execute
+
+ expect(project.repository.branch_names).to include('branch-merged')
+ expect(project.repository.branch_names).to include('improve/awesome')
+ end
+ end
+ end
+
+ context '#async_execute' do
+ it 'calls DeleteMergedBranchesWorker async' do
+ expect(DeleteMergedBranchesWorker).to receive(:perform_async)
+
+ service.async_execute
+ end
+ end
+end
diff --git a/spec/services/branches/delete_service_spec.rb b/spec/services/branches/delete_service_spec.rb
new file mode 100644
index 00000000000..b4848978a6f
--- /dev/null
+++ b/spec/services/branches/delete_service_spec.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Branches::DeleteService do
+ let(:project) { create(:project, :repository) }
+ let(:repository) { project.repository }
+ let(:user) { create(:user) }
+ subject(:service) { described_class.new(project, user) }
+
+ shared_examples 'a deleted branch' do |branch_name|
+ it 'removes the branch' do
+ expect(branch_exists?(branch_name)).to be true
+
+ result = service.execute(branch_name)
+
+ expect(result.status).to eq :success
+ expect(branch_exists?(branch_name)).to be false
+ end
+ end
+
+ describe '#execute' do
+ context 'when user has access to push to repository' do
+ before do
+ project.add_developer(user)
+ end
+
+ it_behaves_like 'a deleted branch', 'feature'
+ end
+
+ context 'when user does not have access to push to repository' do
+ it 'does not remove branch' do
+ expect(branch_exists?('feature')).to be true
+
+ result = service.execute('feature')
+
+ expect(result.status).to eq :error
+ expect(result.message).to eq 'You dont have push access to repo'
+ expect(branch_exists?('feature')).to be true
+ end
+ end
+ end
+
+ def branch_exists?(branch_name)
+ repository.ref_exists?("refs/heads/#{branch_name}")
+ end
+end
diff --git a/spec/services/branches/validate_new_service_spec.rb b/spec/services/branches/validate_new_service_spec.rb
new file mode 100644
index 00000000000..460f28b5844
--- /dev/null
+++ b/spec/services/branches/validate_new_service_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Branches::ValidateNewService do
+ let(:project) { create(:project, :repository) }
+ subject(:service) { described_class.new(project) }
+
+ describe '#execute' do
+ context 'validation' do
+ it 'returns error with an invalid branch name' do
+ result = service.execute('refs/heads/invalid_branch')
+
+ expect(result[:status]).to eq(:error)
+ expect(result[:message]).to eq('Branch name is invalid')
+ end
+
+ it 'returns success with a valid branch name' do
+ result = service.execute('valid_branch_name')
+
+ expect(result[:status]).to eq(:success)
+ end
+ end
+
+ context 'branch exist' do
+ it 'returns error when branch exists' do
+ result = service.execute('master')
+
+ expect(result[:status]).to eq(:error)
+ expect(result[:message]).to eq('Branch already exists')
+ end
+
+ it 'returns success when branch name is available' do
+ result = service.execute('valid_branch_name')
+
+ expect(result[:status]).to eq(:success)
+ end
+ end
+ end
+end