Commit ee89d955 authored by Nick Thomas's avatar Nick Thomas

Merge branch 'id-split-self-approval-restrictions' into 'master'

Backport splitting approval changes from CE

See merge request gitlab-org/gitlab-ce!26323
parents f21f93f9 351b39f1
...@@ -20,8 +20,8 @@ class CommitCollection ...@@ -20,8 +20,8 @@ class CommitCollection
commits.each(&block) commits.each(&block)
end end
def authors def committers
emails = without_merge_commits.map(&:author_email).uniq emails = without_merge_commits.map(&:committer_email).uniq
User.by_any_email(emails) User.by_any_email(emails)
end end
......
...@@ -323,12 +323,8 @@ class MergeRequest < ApplicationRecord ...@@ -323,12 +323,8 @@ class MergeRequest < ApplicationRecord
work_in_progress?(title) ? title : "WIP: #{title}" work_in_progress?(title) ? title : "WIP: #{title}"
end end
def commit_authors def committers
@commit_authors ||= commits.authors @committers ||= commits.committers
end
def authors
User.from_union([commit_authors, User.where(id: self.author_id)])
end end
# Verifies if title has changed not taking into account WIP prefix # Verifies if title has changed not taking into account WIP prefix
......
...@@ -14,26 +14,26 @@ describe CommitCollection do ...@@ -14,26 +14,26 @@ describe CommitCollection do
end end
end end
describe '.authors' do describe '.committers' do
it 'returns a relation of users when users are found' do it 'returns a relation of users when users are found' do
user = create(:user, email: commit.author_email.upcase) user = create(:user, email: commit.committer_email.upcase)
collection = described_class.new(project, [commit]) collection = described_class.new(project, [commit])
expect(collection.authors).to contain_exactly(user) expect(collection.committers).to contain_exactly(user)
end end
it 'returns empty array when authors cannot be found' do it 'returns empty array when committers cannot be found' do
collection = described_class.new(project, [commit]) collection = described_class.new(project, [commit])
expect(collection.authors).to be_empty expect(collection.committers).to be_empty
end end
it 'excludes authors of merge commits' do it 'excludes authors of merge commits' do
commit = project.commit("60ecb67744cb56576c30214ff52294f8ce2def98") commit = project.commit("60ecb67744cb56576c30214ff52294f8ce2def98")
create(:user, email: commit.author_email.upcase) create(:user, email: commit.committer_email.upcase)
collection = described_class.new(project, [commit]) collection = described_class.new(project, [commit])
expect(collection.authors).to be_empty expect(collection.committers).to be_empty
end end
end end
......
...@@ -476,7 +476,6 @@ describe MergeRequest do ...@@ -476,7 +476,6 @@ describe MergeRequest do
it 'does not cache issues from external trackers' do it 'does not cache issues from external trackers' do
issue = ExternalIssue.new('JIRA-123', subject.project) issue = ExternalIssue.new('JIRA-123', subject.project)
commit = double('commit1', safe_message: "Fixes #{issue.to_reference}") commit = double('commit1', safe_message: "Fixes #{issue.to_reference}")
allow(subject).to receive(:commits).and_return([commit]) allow(subject).to receive(:commits).and_return([commit])
expect { subject.cache_merge_request_closes_issues!(subject.author) }.not_to raise_error expect { subject.cache_merge_request_closes_issues!(subject.author) }.not_to raise_error
...@@ -1065,31 +1064,17 @@ describe MergeRequest do ...@@ -1065,31 +1064,17 @@ describe MergeRequest do
end end
end end
describe '#commit_authors' do describe '#committers' do
it 'returns all the authors of every commit in the merge request' do it 'returns all the committers of every commit in the merge request' do
users = subject.commits.without_merge_commits.map(&:author_email).uniq.map do |email| users = subject.commits.without_merge_commits.map(&:committer_email).uniq.map do |email|
create(:user, email: email)
end
expect(subject.commit_authors).to match_array(users)
end
it 'returns an empty array if no author is associated with a user' do
expect(subject.commit_authors).to be_empty
end
end
describe '#authors' do
it 'returns a list with all the commit authors in the merge request and author' do
users = subject.commits.without_merge_commits.map(&:author_email).uniq.map do |email|
create(:user, email: email) create(:user, email: email)
end end
expect(subject.authors).to match_array([subject.author, *users]) expect(subject.committers).to match_array(users)
end end
it 'returns only the author if no committer is associated with a user' do it 'returns an empty array if no committer is associated with a user' do
expect(subject.authors).to contain_exactly(subject.author) expect(subject.committers).to be_empty
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment