diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2016-12-14 21:00:06 +0800 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2016-12-14 23:37:49 +0800 |
commit | 7cced60069c248156decf6ceabc4d1f447e47ff7 (patch) | |
tree | 1c7c6f52745c3b2066094dcd6edec3fd99e91f62 | |
parent | 3ce6ba7db9bcdeb9a642e7020fb736ebe54f88aa (diff) | |
download | gitlab-ce-7cced60069c248156decf6ceabc4d1f447e47ff7.tar.gz |
Introduce latest_status and add a few tests
Feedback:
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7333#note_20003268
-rw-r--r-- | app/models/ci/pipeline.rb | 4 | ||||
-rw-r--r-- | app/models/commit.rb | 4 | ||||
-rw-r--r-- | app/services/ci/image_for_build_service.rb | 2 | ||||
-rw-r--r-- | spec/models/ci/pipeline_spec.rb | 57 | ||||
-rw-r--r-- | spec/models/commit_spec.rb | 4 |
5 files changed, 66 insertions, 5 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index aa0367227a8..9edfc75eac7 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -98,6 +98,10 @@ module Ci end.where(id: max_id.group(:ref, :sha)) end + def self.latest_status(ref = nil) + latest(ref).status + end + def self.latest_successful_for(ref) success.latest(ref).first end diff --git a/app/models/commit.rb b/app/models/commit.rb index 91c7970fca6..69cfc47f5bf 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -230,7 +230,7 @@ class Commit return @statuses[ref] if @statuses.key?(ref) - @statuses[ref] = pipelines.latest(ref).status + @statuses[ref] = pipelines.latest_status(ref) end def revert_branch_name @@ -266,7 +266,7 @@ class Commit @merged_merge_request_hash ||= Hash.new do |hash, user| hash[user] = merged_merge_request_no_cache(user) end - + @merged_merge_request_hash[current_user] end diff --git a/app/services/ci/image_for_build_service.rb b/app/services/ci/image_for_build_service.rb index 1eeb0e2363a..240ddabec36 100644 --- a/app/services/ci/image_for_build_service.rb +++ b/app/services/ci/image_for_build_service.rb @@ -5,7 +5,7 @@ module Ci sha = opts[:sha] || ref_sha(project, ref) pipelines = project.pipelines.where(sha: sha) - image_name = image_for_status(pipelines.latest(ref).status) + image_name = image_for_status(pipelines.latest_status(ref)) image_path = Rails.root.join('public/ci', image_name) OpenStruct.new(path: image_path, name: image_name) diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index e78ae14b737..21df5df1b76 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -381,6 +381,63 @@ describe Ci::Pipeline, models: true do end end + shared_context 'with some empty pipelines' do + before do + create_pipeline(:canceled, 'ref', 'A') + create_pipeline(:success, 'ref', 'A') + create_pipeline(:failed, 'ref', 'B') + create_pipeline(:skipped, 'feature', 'C') + end + + def create_pipeline(status, ref, sha) + create(:ci_empty_pipeline, status: status, ref: ref, sha: sha) + end + end + + describe '.latest' do + include_context 'with some empty pipelines' + + context 'when no ref is specified' do + let(:pipelines) { Ci::Pipeline.latest.all } + + it 'returns the latest pipeline for the same ref and different sha' do + expect(pipelines.map(&:sha)).to contain_exactly('A', 'B', 'C') + expect(pipelines.map(&:status)). + to contain_exactly('success', 'failed', 'skipped') + end + end + + context 'when ref is specified' do + let(:pipelines) { Ci::Pipeline.latest('ref').all } + + it 'returns the latest pipeline for ref and different sha' do + expect(pipelines.map(&:sha)).to contain_exactly('A', 'B') + expect(pipelines.map(&:status)). + to contain_exactly('success', 'failed') + end + end + end + + describe '.latest_status' do + include_context 'with some empty pipelines' + + context 'when no ref is specified' do + let(:latest_status) { Ci::Pipeline.latest_status } + + it 'returns the latest status for the same ref and different sha' do + expect(latest_status).to eq(Ci::Pipeline.latest.status) + end + end + + context 'when ref is specified' do + let(:latest_status) { Ci::Pipeline.latest_status('ref') } + + it 'returns the latest status for ref and different sha' do + expect(latest_status).to eq(Ci::Pipeline.latest_status('ref')) + end + end + end + describe '#status' do let!(:build) { create(:ci_build, :created, pipeline: pipeline, name: 'test') } diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb index b81fab0372a..a2a8392699e 100644 --- a/spec/models/commit_spec.rb +++ b/spec/models/commit_spec.rb @@ -224,7 +224,7 @@ eos end it 'gives compound status from latest pipelines' do - expect(commit.status).to eq(Ci::Pipeline.latest.status) + expect(commit.status).to eq(Ci::Pipeline.latest_status) end end @@ -251,7 +251,7 @@ eos end it 'gives compound status from latest pipelines if ref is nil' do - expect(commit.status(nil)).to eq(Ci::Pipeline.latest.status) + expect(commit.status(nil)).to eq(Ci::Pipeline.latest_status) end end end |