From caf6b9918e3f7a79c9ffcffd1880f29422d50eb5 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon <grzesiek.bizon@gmail.com> Date: Thu, 15 Jun 2017 14:43:47 +0200 Subject: [PATCH] Check warnings when building compound status SQL query --- app/models/commit_status.rb | 6 ------ app/models/concerns/has_status.rb | 23 +++++++++++++---------- spec/models/commit_status_spec.rb | 2 +- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 500d05fd84..07cec63b93 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -103,12 +103,6 @@ class CommitStatus < ActiveRecord::Base end end - def self.status - super.tap do |status| - return 'success' if status == 'skipped' && all.failed_but_allowed.any? - end - end - def locking_enabled? status_changed? end diff --git a/app/models/concerns/has_status.rb b/app/models/concerns/has_status.rb index 3c9c6584e0..32af556613 100644 --- a/app/models/concerns/has_status.rb +++ b/app/models/concerns/has_status.rb @@ -11,18 +11,21 @@ module HasStatus class_methods do def status_sql - scope = respond_to?(:exclude_ignored) ? exclude_ignored : all - - builds = scope.select('count(*)').to_sql - created = scope.created.select('count(*)').to_sql - success = scope.success.select('count(*)').to_sql - manual = scope.manual.select('count(*)').to_sql - pending = scope.pending.select('count(*)').to_sql - running = scope.running.select('count(*)').to_sql - skipped = scope.skipped.select('count(*)').to_sql - canceled = scope.canceled.select('count(*)').to_sql + scope_relevant = respond_to?(:exclude_ignored) ? exclude_ignored : all + scope_warnings = respond_to?(:failed_but_allowed) ? failed_but_allowed : none + + builds = scope_relevant.select('count(*)').to_sql + created = scope_relevant.created.select('count(*)').to_sql + success = scope_relevant.success.select('count(*)').to_sql + manual = scope_relevant.manual.select('count(*)').to_sql + pending = scope_relevant.pending.select('count(*)').to_sql + running = scope_relevant.running.select('count(*)').to_sql + skipped = scope_relevant.skipped.select('count(*)').to_sql + canceled = scope_relevant.canceled.select('count(*)').to_sql + warnings = scope_warnings.select('count(*) > 0').to_sql.presence || 'false' "(CASE + WHEN (#{builds})=(#{skipped}) AND (#{warnings}) THEN 'success' WHEN (#{builds})=(#{skipped}) THEN 'skipped' WHEN (#{builds})=(#{success}) THEN 'success' WHEN (#{builds})=(#{created}) THEN 'created' diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index dc348f6cd3..1e074c7ad2 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -309,7 +309,7 @@ describe CommitStatus, :models do context 'when using a scope to select latest statuses' do before do - create_status(name: 'test', status: 'failed') + create_status(name: 'test', retried: true, status: 'failed') create_status(allow_failure: true, name: 'test', status: 'failed') end -- 2.30.9