Commit e61ae8ae authored by Allison Browne's avatar Allison Browne

Changes based on code review

Add specs to cover more statuses
parent 13d51985
......@@ -7,6 +7,9 @@ module Ci
DEFAULT_STATUS = 'created'
BLOCKED_STATUS = %w[manual scheduled].freeze
AVAILABLE_STATUSES = %w[created waiting_for_resource preparing pending running success failed canceled skipped manual scheduled].freeze
# TODO: replace STARTED_STATUSES with data from BUILD_STARTED_RUNNING_STATUSES in https://gitlab.com/gitlab-org/gitlab/-/issues/273378
# see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/82149#note_865508501
BUILD_STARTED_RUNNING_STATUSES = %w[running success failed].freeze
STARTED_STATUSES = %w[running success failed skipped manual scheduled].freeze
ACTIVE_STATUSES = %w[waiting_for_resource preparing pending running].freeze
COMPLETED_STATUSES = %w[success failed canceled skipped].freeze
......
......@@ -55,7 +55,7 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
context 'when the previous pipeline has a child pipeline' do
let(:child_pipeline) { create(:ci_pipeline, child_of: prev_pipeline) }
context 'when the child pipeline has only interruptible running jobs' do
context 'when the child pipeline has interruptible running jobs' do
before do
create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
......@@ -88,7 +88,7 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
context 'when the child pipeline has started non-interruptible job' do
before do
create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
# non-iterruptible started
# non-interruptible started
create(:ci_build, :success, pipeline: child_pipeline)
end
......@@ -104,16 +104,39 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::CancelPendingPipelines do
context 'when the child pipeline has non-interruptible non-started job' do
before do
create(:ci_build, :interruptible, :running, pipeline: child_pipeline)
# non-iterruptible but non-started
create(:ci_build, :created, pipeline: child_pipeline)
end
it 'cancels all child pipeline builds' do
expect(build_statuses(child_pipeline)).to contain_exactly('running', 'created')
not_started_statuses = Ci::HasStatus::AVAILABLE_STATUSES - Ci::HasStatus::BUILD_STARTED_RUNNING_STATUSES
context 'when the jobs are cancelable' do
cancelable_not_started_statuses = Set.new(not_started_statuses).intersection(Ci::HasStatus::CANCELABLE_STATUSES)
cancelable_not_started_statuses.each do |status|
it 'cancels all child pipeline builds' do
# non-interruptible but non-started
create(:ci_build, status.to_sym, pipeline: child_pipeline)
perform
expect(build_statuses(child_pipeline)).to contain_exactly('running', status)
expect(build_statuses(child_pipeline)).to contain_exactly('canceled', 'canceled')
perform
expect(build_statuses(child_pipeline)).to contain_exactly('canceled', 'canceled')
end
end
end
context 'when the jobs are not cancelable' do
not_cancelable_not_started_statuses = not_started_statuses - Ci::HasStatus::CANCELABLE_STATUSES
not_cancelable_not_started_statuses.each do |status|
it 'does not cancel child pipeline builds' do
# non-interruptible but non-started
create(:ci_build, status.to_sym, pipeline: child_pipeline)
expect(build_statuses(child_pipeline)).to contain_exactly('running', status)
perform
expect(build_statuses(child_pipeline)).to contain_exactly('canceled', status)
end
end
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment