From a4b4e707ec3ebd9fc82079f86fd409584a6d5c2f Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Tue, 29 Aug 2017 13:48:40 +0200 Subject: [PATCH] fix finishing a build that has a canceled job on a stage --- lib/travis/hub/model/stage.rb | 2 +- spec/travis/hub/model/stage_spec.rb | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/travis/hub/model/stage.rb b/lib/travis/hub/model/stage.rb index 87fad52d1..c54c6b5ae 100644 --- a/lib/travis/hub/model/stage.rb +++ b/lib/travis/hub/model/stage.rb @@ -7,7 +7,7 @@ class Stage < ActiveRecord::Base event :start, if: :start? event :finish, if: :finish?, to: Build::FINISHED_STATES - event :cancel + event :cancel, if: :finish? event :restart event :all, after: :propagate diff --git a/spec/travis/hub/model/stage_spec.rb b/spec/travis/hub/model/stage_spec.rb index ff0df618a..836517ed3 100644 --- a/spec/travis/hub/model/stage_spec.rb +++ b/spec/travis/hub/model/stage_spec.rb @@ -98,4 +98,18 @@ def reload it { expect(Travis::Event).to have_received(:dispatch).times(3) } end + + describe 'cancel and fail' do + before { jobs[0].cancel! } + before { jobs[2].cancel! } + before { jobs[1].finish!(state: :failed, finished_at: now) } + before { reload } + + it { expect(build.state).to eq :canceled } + it { expect(stages[0].state).to eq :canceled } + it { expect(stages[1].state).to eq :canceled } + it { expect(jobs[0].state).to eq :canceled } + it { expect(jobs[1].state).to eq :failed } + it { expect(jobs[2].state).to eq :canceled } + end end