Add specs for build retry service

This commit is contained in:
Grzegorz Bizon 2017-02-10 16:19:29 +01:00
parent 9202b1f4df
commit db09d10599
2 changed files with 62 additions and 0 deletions

View file

@ -1,5 +1,7 @@
module Ci
class RetryBuildService
include Gitlab::Allowable
def initialize(build, user)
@build = build
@user = user
@ -7,6 +9,10 @@ module Ci
end
def retry!
unless can?(@user, :update_build, @build)
raise Gitlab::Access::AccessDeniedError
end
clone_build.tap do |new_build|
new_build.enqueue!

View file

@ -0,0 +1,56 @@
require 'spec_helper'
describe Ci::RetryBuildService, :services do
let(:user) { create(:user) }
let(:project) { create(:empty_project) }
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline) }
let(:service) do
described_class.new(build, user)
end
describe '#retry!' do
let(:new_build) { service.retry! }
context 'when user has ability to retry build' do
before do
project.team << [user, :developer]
end
it 'creates a new build that represents the old one' do
expect(new_build.name).to eq build.name
end
it 'enqueues the new build' do
expect(new_build).to be_pending
end
it 'resolves todos for old build that failed' do
expect(MergeRequests::AddTodoWhenBuildFailsService)
.to receive_message_chain(:new, :close)
service.retry!
end
context 'when there are subsequent builds that are skipped' do
let!(:subsequent_build) do
create(:ci_build, :skipped, stage_idx: 1, pipeline: pipeline)
end
it 'resumes pipeline processing in subsequent stages' do
service.retry!
expect(subsequent_build.reload).to be_created
end
end
end
context 'when user does not have ability to retry build' do
it 'raises an error' do
expect { service.retry! }
.to raise_error Gitlab::Access::AccessDeniedError
end
end
end
end