introduce MergeRequest#issues_mentioned_but_not_closing
This commit is contained in:
parent
e52e3ab508
commit
1a8f43ff3e
2 changed files with 52 additions and 21 deletions
|
@ -568,6 +568,22 @@ class MergeRequest < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def issues_mentioned_but_not_closing(current_user = self.author)
|
||||
issues = []
|
||||
|
||||
if target_branch == project.default_branch
|
||||
messages = [description]
|
||||
messages.concat(commits.map(&:safe_message)) if merge_request_diff
|
||||
|
||||
ext = Gitlab::ReferenceExtractor.new(project, current_user)
|
||||
ext.analyze(messages.join("\n"))
|
||||
|
||||
issues = ext.issues
|
||||
end
|
||||
|
||||
issues - closes_issues
|
||||
end
|
||||
|
||||
def target_project_path
|
||||
if target_project
|
||||
target_project.path_with_namespace
|
||||
|
|
|
@ -252,7 +252,7 @@ describe MergeRequest, models: true do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'detection of issues to be closed' do
|
||||
describe 'detection of issues' do
|
||||
let(:issue0) { create :issue, project: subject.project }
|
||||
let(:issue1) { create :issue, project: subject.project }
|
||||
|
||||
|
@ -265,29 +265,44 @@ describe MergeRequest, models: true do
|
|||
allow(subject).to receive(:commits).and_return([commit0, commit1, commit2])
|
||||
end
|
||||
|
||||
it 'accesses the set of issues that will be closed on acceptance' do
|
||||
describe 'detection of issues to be closed' do
|
||||
it 'accesses the set of issues that will be closed on acceptance' do
|
||||
allow(subject.project).to receive(:default_branch).
|
||||
and_return(subject.target_branch)
|
||||
|
||||
closed = subject.closes_issues
|
||||
|
||||
expect(closed).to include(issue0, issue1)
|
||||
end
|
||||
|
||||
it 'only lists issues as to be closed if it targets the default branch' do
|
||||
allow(subject.project).to receive(:default_branch).and_return('master')
|
||||
subject.target_branch = 'something-else'
|
||||
|
||||
expect(subject.closes_issues).to be_empty
|
||||
end
|
||||
|
||||
it 'detects issues mentioned in the description' do
|
||||
issue2 = create(:issue, project: subject.project)
|
||||
|
||||
subject.description = "Closes #{issue2.to_reference}"
|
||||
|
||||
allow(subject.project).to receive(:default_branch).
|
||||
and_return(subject.target_branch)
|
||||
|
||||
expect(subject.closes_issues).to include(issue2)
|
||||
end
|
||||
end
|
||||
|
||||
it 'detects issues mentioned but not closed' do
|
||||
mentioned_issue = create(:issue, project: subject.project)
|
||||
|
||||
subject.description = "Is related to #{mentioned_issue.to_reference}"
|
||||
|
||||
allow(subject.project).to receive(:default_branch).
|
||||
and_return(subject.target_branch)
|
||||
|
||||
closed = subject.closes_issues
|
||||
|
||||
expect(closed).to include(issue0, issue1)
|
||||
end
|
||||
|
||||
it 'only lists issues as to be closed if it targets the default branch' do
|
||||
allow(subject.project).to receive(:default_branch).and_return('master')
|
||||
subject.target_branch = 'something-else'
|
||||
|
||||
expect(subject.closes_issues).to be_empty
|
||||
end
|
||||
|
||||
it 'detects issues mentioned in the description' do
|
||||
issue2 = create(:issue, project: subject.project)
|
||||
subject.description = "Closes #{issue2.to_reference}"
|
||||
allow(subject.project).to receive(:default_branch).
|
||||
and_return(subject.target_branch)
|
||||
|
||||
expect(subject.closes_issues).to include(issue2)
|
||||
expect(subject.issues_mentioned_but_not_closing).to match_array([mentioned_issue])
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue