Raise error if pipeline / stage hits unknown status
This commit is contained in:
parent
93241149e6
commit
114c26ccf0
5 changed files with 61 additions and 1 deletions
|
@ -517,7 +517,8 @@ module Ci
|
|||
|
||||
def update_status
|
||||
retry_optimistic_lock(self) do
|
||||
case latest_builds_status
|
||||
case latest_builds_status.to_s
|
||||
when 'created' then nil
|
||||
when 'pending' then enqueue
|
||||
when 'running' then run
|
||||
when 'success' then succeed
|
||||
|
@ -525,6 +526,9 @@ module Ci
|
|||
when 'canceled' then cancel
|
||||
when 'skipped' then skip
|
||||
when 'manual' then block
|
||||
else
|
||||
raise HasStatus::UnknownStatusError,
|
||||
"Unknown status `#{latest_builds_status}`"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -68,6 +68,7 @@ module Ci
|
|||
def update_status
|
||||
retry_optimistic_lock(self) do
|
||||
case statuses.latest.status
|
||||
when 'created' then nil
|
||||
when 'pending' then enqueue
|
||||
when 'running' then run
|
||||
when 'success' then succeed
|
||||
|
@ -75,6 +76,9 @@ module Ci
|
|||
when 'canceled' then cancel
|
||||
when 'manual' then block
|
||||
when 'skipped', nil then skip
|
||||
else
|
||||
raise HasStatus::UnknownStatusError,
|
||||
"Unknown status `#{statuses.latest.status}`"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,6 +11,8 @@ module HasStatus
|
|||
STATUSES_ENUM = { created: 0, pending: 1, running: 2, success: 3,
|
||||
failed: 4, canceled: 5, skipped: 6, manual: 7 }.freeze
|
||||
|
||||
UnknownStatusError = Class.new(StandardError)
|
||||
|
||||
class_methods do
|
||||
def status_sql
|
||||
scope_relevant = respond_to?(:exclude_ignored) ? exclude_ignored : all
|
||||
|
|
|
@ -1251,6 +1251,43 @@ describe Ci::Pipeline, :mailer do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#update_status' do
|
||||
context 'when pipeline is empty' do
|
||||
it 'updates does not change pipeline status' do
|
||||
expect(pipeline.statuses.latest.status).to be_nil
|
||||
|
||||
expect { pipeline.update_status }
|
||||
.to change { pipeline.reload.status }.to 'skipped'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when updating status to pending' do
|
||||
before do
|
||||
allow(pipeline)
|
||||
.to receive_message_chain(:statuses, :latest, :status)
|
||||
.and_return(:running)
|
||||
end
|
||||
|
||||
it 'updates pipeline status to running' do
|
||||
expect { pipeline.update_status }
|
||||
.to change { pipeline.reload.status }.to 'running'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when statuses status was not recognized' do
|
||||
before do
|
||||
allow(pipeline)
|
||||
.to receive(:latest_builds_status)
|
||||
.and_return(:unknown)
|
||||
end
|
||||
|
||||
it 'raises an exception' do
|
||||
expect { pipeline.update_status }
|
||||
.to raise_error(HasStatus::UnknownStatusError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#detailed_status' do
|
||||
subject { pipeline.detailed_status(user) }
|
||||
|
||||
|
|
|
@ -110,6 +110,19 @@ describe Ci::Stage, :models do
|
|||
expect(stage.reload).to be_failed
|
||||
end
|
||||
end
|
||||
|
||||
context 'when statuses status was not recognized' do
|
||||
before do
|
||||
allow(stage)
|
||||
.to receive_message_chain(:statuses, :latest, :status)
|
||||
.and_return(:unknown)
|
||||
end
|
||||
|
||||
it 'raises an exception' do
|
||||
expect { stage.update_status }
|
||||
.to raise_error(HasStatus::UnknownStatusError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#detailed_status' do
|
||||
|
|
Loading…
Reference in a new issue