2018-09-26 06:13:39 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Ci::ProcessBuildService, '#execute' do
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
let(:project) { create(:project) }
|
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
subject { described_class.new(project, user).execute(build, current_status) }
|
2018-09-26 06:13:39 +00:00
|
|
|
|
|
|
|
before do
|
|
|
|
project.add_maintainer(user)
|
|
|
|
end
|
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
context 'when build has on_success option' do
|
|
|
|
let(:build) { create(:ci_build, :created, when: :on_success, user: user, project: project) }
|
2018-09-28 07:17:01 +00:00
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
context 'when current status is success' do
|
|
|
|
let(:current_status) { 'success' }
|
2018-09-28 07:17:01 +00:00
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
it 'changes the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('pending')
|
|
|
|
end
|
|
|
|
end
|
2018-09-28 07:17:01 +00:00
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
context 'when current status is failed' do
|
|
|
|
let(:current_status) { 'failed' }
|
2018-09-28 07:17:01 +00:00
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
it 'does not change the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('skipped')
|
2018-09-28 07:17:01 +00:00
|
|
|
end
|
|
|
|
end
|
2018-09-26 06:13:39 +00:00
|
|
|
end
|
|
|
|
|
2018-09-28 07:17:01 +00:00
|
|
|
context 'when build has on_failure option' do
|
2018-10-18 06:07:27 +00:00
|
|
|
let(:build) { create(:ci_build, :created, when: :on_failure, user: user, project: project) }
|
|
|
|
|
|
|
|
context 'when current status is success' do
|
|
|
|
let(:current_status) { 'success' }
|
|
|
|
|
|
|
|
it 'changes the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('skipped')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when current status is failed' do
|
|
|
|
let(:current_status) { 'failed' }
|
|
|
|
|
|
|
|
it 'does not change the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('pending')
|
|
|
|
end
|
|
|
|
end
|
2018-09-28 07:17:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'when build has always option' do
|
2018-10-18 06:07:27 +00:00
|
|
|
let(:build) { create(:ci_build, :created, when: :always, user: user, project: project) }
|
|
|
|
|
|
|
|
context 'when current status is success' do
|
|
|
|
let(:current_status) { 'success' }
|
|
|
|
|
|
|
|
it 'changes the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('pending')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when current status is failed' do
|
|
|
|
let(:current_status) { 'failed' }
|
|
|
|
|
|
|
|
it 'does not change the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('pending')
|
|
|
|
end
|
|
|
|
end
|
2018-09-28 07:17:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'when build has manual option' do
|
2018-10-18 06:07:27 +00:00
|
|
|
let(:build) { create(:ci_build, :created, :actionable, user: user, project: project) }
|
|
|
|
|
|
|
|
context 'when current status is success' do
|
|
|
|
let(:current_status) { 'success' }
|
|
|
|
|
|
|
|
it 'changes the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('manual')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when current status is failed' do
|
|
|
|
let(:current_status) { 'failed' }
|
|
|
|
|
|
|
|
it 'does not change the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('skipped')
|
|
|
|
end
|
|
|
|
end
|
2018-09-28 07:17:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'when build has delayed option' do
|
|
|
|
before do
|
|
|
|
allow(Ci::BuildScheduleWorker).to receive(:perform_at) { }
|
2018-09-26 06:13:39 +00:00
|
|
|
end
|
2018-09-28 07:17:01 +00:00
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
let(:build) { create(:ci_build, :created, :schedulable, user: user, project: project) }
|
|
|
|
|
2018-10-02 04:43:45 +00:00
|
|
|
context 'when ci_enable_scheduled_build is enabled' do
|
|
|
|
before do
|
|
|
|
stub_feature_flags(ci_enable_scheduled_build: true)
|
|
|
|
end
|
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
context 'when current status is success' do
|
|
|
|
let(:current_status) { 'success' }
|
|
|
|
|
|
|
|
it 'changes the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('scheduled')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when current status is failed' do
|
|
|
|
let(:current_status) { 'failed' }
|
|
|
|
|
|
|
|
it 'does not change the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('skipped')
|
|
|
|
end
|
|
|
|
end
|
2018-10-02 04:43:45 +00:00
|
|
|
end
|
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
context 'when ci_enable_scheduled_build is disabled' do
|
2018-10-02 04:43:45 +00:00
|
|
|
before do
|
|
|
|
stub_feature_flags(ci_enable_scheduled_build: false)
|
|
|
|
end
|
|
|
|
|
2018-10-18 06:07:27 +00:00
|
|
|
context 'when current status is success' do
|
|
|
|
let(:current_status) { 'success' }
|
|
|
|
|
|
|
|
it 'changes the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('manual')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when current status is failed' do
|
|
|
|
let(:current_status) { 'failed' }
|
|
|
|
|
|
|
|
it 'does not change the build status' do
|
|
|
|
expect { subject }.to change { build.status }.to('skipped')
|
|
|
|
end
|
|
|
|
end
|
2018-10-02 04:43:45 +00:00
|
|
|
end
|
2018-09-26 06:13:39 +00:00
|
|
|
end
|
|
|
|
end
|