Commit d983c5bd authored by Kamil Trzcinski's avatar Kamil Trzcinski

Verify the pipeline status after executing events on builds

parent 4c29c254
......@@ -185,6 +185,7 @@ module Ci
def process!
Ci::ProcessPipelineService.new(project, user).execute(self)
reload_status!
end
......@@ -195,7 +196,7 @@ module Ci
end
def reload_status!
statuses.reload
reload
self.status =
if yaml_errors.blank?
statuses.latest.status || 'skipped'
......
......@@ -76,6 +76,12 @@ class CommitStatus < ActiveRecord::Base
commit_status.pipeline.process! if commit_status.pipeline
end
around_transition any => [:pending, :running] do |commit_status, block|
block.call
commit_status.pipeline.reload_status! if commit_status.pipeline
end
end
delegate :sha, :short_sha, to: :pipeline
......
......@@ -254,4 +254,49 @@ describe Ci::Pipeline, models: true do
end
end
end
describe '#status' do
let!(:build) { create(:ci_build, :created, pipeline: pipeline, name: 'test') }
subject { pipeline.reload.status }
context 'on queuing' do
before { build.queue }
it { is_expected.to eq('pending') }
end
context 'on run' do
before do
build.queue
build.run
end
it { is_expected.to eq('running') }
end
context 'on drop' do
before do
build.drop
end
it { is_expected.to eq('failed') }
end
context 'on success' do
before do
build.success
end
it { is_expected.to eq('success') }
end
context 'on cancel' do
before do
build.cancel
end
it { is_expected.to eq('canceled') }
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