summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/project.rb3
-rw-r--r--spec/models/project_spec.rb38
2 files changed, 28 insertions, 13 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index dc9b4b38a10..2969bec0bf7 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1086,7 +1086,8 @@ class Project < ActiveRecord::Base
!namespace.share_with_group_lock
end
- def pipeline_for(ref, sha)
+ def pipeline_for(ref, sha = commit(ref).try(:sha))
+ return unless sha
pipelines.order(id: :desc).find_by(sha: sha, ref: ref)
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 60819fe02be..1ce306c4f39 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -684,23 +684,37 @@ describe Project, models: true do
end
end
- describe '#pipeline' do
- let(:project) { create :project }
- let(:pipeline) { create :ci_pipeline, project: project, ref: 'master' }
-
- subject { project.pipeline_for('master', pipeline.sha) }
+ describe '#pipeline_for' do
+ let(:project) { create(:project) }
+ let!(:pipeline) { create_pipeline }
- it { is_expected.to eq(pipeline) }
+ shared_examples 'giving the correct pipeline' do
+ it { is_expected.to eq(pipeline) }
- context 'return latest' do
- let(:pipeline2) { create :ci_pipeline, project: project, ref: 'master' }
+ context 'return latest' do
+ let!(:pipeline2) { create_pipeline }
- before do
- pipeline
- pipeline2
+ it { is_expected.to eq(pipeline2) }
end
+ end
+
+ context 'with explicit sha' do
+ subject { project.pipeline_for('master', pipeline.sha) }
+
+ it_behaves_like 'giving the correct pipeline'
+ end
+
+ context 'with implicit sha' do
+ subject { project.pipeline_for('master') }
+
+ it_behaves_like 'giving the correct pipeline'
+ end
- it { is_expected.to eq(pipeline2) }
+ def create_pipeline
+ create(:ci_pipeline,
+ project: project,
+ ref: 'master',
+ sha: project.commit('master').sha)
end
end