summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-17 15:31:21 +0200
committerAnnabel Dunstone Gray <annabel.dunstone@gmail.com>2016-10-18 08:32:17 -0500
commitab8ef17fb2a2aa85a76d9106894280be9b910fda (patch)
tree9ef86f7a07e0e7b9f785b3f005819dc71843054b
parentd5b1d0ea501bb6eb0e18f63f4ddc0ba3f32d372a (diff)
downloadgitlab-ce-ab8ef17fb2a2aa85a76d9106894280be9b910fda.tar.gz
Extend merge request tests for all commits method
-rw-r--r--app/models/merge_request.rb7
-rw-r--r--spec/models/merge_request_spec.rb58
2 files changed, 45 insertions, 20 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 88e46ecdc8b..ced0c13b837 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -788,8 +788,8 @@ class MergeRequest < ActiveRecord::Base
return unless source_project
@all_pipelines ||= source_project.pipelines
- .where(sha: all_commits_sha, ref: source_branch)
- .order(id: :desc)
+ .where(sha: all_commits_sha, ref: source_branch)
+ .order(id: :desc)
end
# Note that this could also return SHA from now dangling commits
@@ -798,7 +798,8 @@ class MergeRequest < ActiveRecord::Base
if persisted?
merge_request_diffs.flat_map(&:commits_sha).uniq
else
- compare_commits.reverse.map(&:id)
+ cached_commits = compare_commits.to_a.reverse.map(&:id)
+ cached_commits.any? ? cached_commits : [diff_head_sha]
end
end
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 91a423b670c..344f69a703e 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -640,32 +640,56 @@ describe MergeRequest, models: true do
end
describe '#all_commits_sha' do
- let(:all_commits_sha) do
- subject.merge_request_diffs.flat_map(&:commits).map(&:sha).uniq
- end
+ context 'when merge request is persisted' do
+ let(:all_commits_sha) do
+ subject.merge_request_diffs.flat_map(&:commits).map(&:sha).uniq
+ end
- shared_examples 'returning all SHA' do
- it 'returns all SHA from all merge_request_diffs' do
- expect(subject.merge_request_diffs.size).to eq(2)
- expect(subject.all_commits_sha).to eq(all_commits_sha)
+ shared_examples 'returning all SHA' do
+ it 'returns all SHA from all merge_request_diffs' do
+ expect(subject.merge_request_diffs.size).to eq(2)
+ expect(subject.all_commits_sha).to eq(all_commits_sha)
+ end
end
- end
- context 'with a completely different branch' do
- before do
- subject.update(target_branch: 'v1.0.0')
+ context 'with a completely different branch' do
+ before do
+ subject.update(target_branch: 'v1.0.0')
+ end
+
+ it_behaves_like 'returning all SHA'
end
- it_behaves_like 'returning all SHA'
+ context 'with a branch having no difference' do
+ before do
+ subject.update(target_branch: 'v1.1.0')
+ subject.reload # make sure commits were not cached
+ end
+
+ it_behaves_like 'returning all SHA'
+ end
end
- context 'with a branch having no difference' do
- before do
- subject.update(target_branch: 'v1.1.0')
- subject.reload # make sure commits were not cached
+ context 'when merge request is not persisted' do
+ context 'when compare commits are set in the service' do
+ let(:commit) { spy('commit') }
+
+ subject do
+ build(:merge_request, compare_commits: [commit, commit])
+ end
+
+ it 'returns commits from compare commits temporary data' do
+ expect(subject.all_commits_sha).to eq [commit, commit]
+ end
end
- it_behaves_like 'returning all SHA'
+ context 'when compare commits are not set in the service' do
+ subject { build(:merge_request) }
+
+ it 'returns array with diff head sha element only' do
+ expect(subject.all_commits_sha).to eq [subject.diff_head_sha]
+ end
+ end
end
end