1afab9eb79
It adds a button to the branches page that the user can use to delete all the branches that are already merged. This can be used to clean up all the branches that were forgotten to delete while merging MRs. Fixes #21076.
54 lines
1.4 KiB
Ruby
54 lines
1.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe DeleteMergedBranchesService, services: true do
|
|
subject(:service) { described_class.new(project, project.owner) }
|
|
|
|
let(:project) { create(:project) }
|
|
|
|
context '#execute' do
|
|
context 'unprotected branches' do
|
|
before do
|
|
service.execute
|
|
end
|
|
|
|
it 'deletes a branch that was merged' do
|
|
expect(project.repository.branch_names).not_to include('improve/awesome')
|
|
end
|
|
|
|
it 'keeps branch that is unmerged' do
|
|
expect(project.repository.branch_names).to include('feature')
|
|
end
|
|
|
|
it 'keeps "master"' do
|
|
expect(project.repository.branch_names).to include('master')
|
|
end
|
|
end
|
|
|
|
context 'protected branches' do
|
|
before do
|
|
create(:protected_branch, name: 'improve/awesome', project: project)
|
|
service.execute
|
|
end
|
|
|
|
it 'keeps protected branch' do
|
|
expect(project.repository.branch_names).to include('improve/awesome')
|
|
end
|
|
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
|
|
end
|
|
|
|
context '#async_execute' do
|
|
it 'calls DeleteMergedBranchesWorker async' do
|
|
expect(DeleteMergedBranchesWorker).to receive(:perform_async)
|
|
|
|
service.async_execute
|
|
end
|
|
end
|
|
end
|