Handle external issues in IssueReferenceFilter
In the past this class would use Project#get_issue to retrieve an issue by its ID. This method would automatically determine whether to return an Issue or ExternalIssue. This commit changes IssueReferenceFilter to handle external issues again and in a somewhat more explicit manner than before. Fixes gitlab-org/gitlab-ce#18827
This commit is contained in:
parent
44b8b77e02
commit
ceeba75c76
2 changed files with 43 additions and 3 deletions
|
@ -31,10 +31,14 @@ module Banzai
|
|||
projects_per_reference.each do |path, project|
|
||||
issue_ids = references_per_project[path]
|
||||
|
||||
next unless project.default_issues_tracker?
|
||||
if project.default_issues_tracker?
|
||||
issues = project.issues.where(iid: issue_ids.to_a)
|
||||
else
|
||||
issues = issue_ids.map { |id| ExternalIssue.new(id, project) }
|
||||
end
|
||||
|
||||
project.issues.where(iid: issue_ids.to_a).each do |issue|
|
||||
hash[project][issue.iid] = issue
|
||||
issues.each do |issue|
|
||||
hash[project][issue.iid.to_i] = issue
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -198,4 +198,40 @@ describe Banzai::Filter::IssueReferenceFilter, lib: true do
|
|||
expect(doc.to_html).to match(/\(<a.+>Reference<\/a>\.\)/)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#issues_per_Project' do
|
||||
context 'using an internal issue tracker' do
|
||||
it 'returns a Hash containing the issues per project' do
|
||||
doc = Nokogiri::HTML.fragment('')
|
||||
filter = described_class.new(doc, project: project)
|
||||
|
||||
expect(filter).to receive(:projects_per_reference).
|
||||
and_return({ project.path_with_namespace => project })
|
||||
|
||||
expect(filter).to receive(:references_per_project).
|
||||
and_return({ project.path_with_namespace => Set.new([issue.iid]) })
|
||||
|
||||
expect(filter.issues_per_project).
|
||||
to eq({ project => { issue.iid => issue } })
|
||||
end
|
||||
end
|
||||
|
||||
context 'using an external issue tracker' do
|
||||
it 'returns a Hash containing the issues per project' do
|
||||
doc = Nokogiri::HTML.fragment('')
|
||||
filter = described_class.new(doc, project: project)
|
||||
|
||||
expect(project).to receive(:default_issues_tracker?).and_return(false)
|
||||
|
||||
expect(filter).to receive(:projects_per_reference).
|
||||
and_return({ project.path_with_namespace => project })
|
||||
|
||||
expect(filter).to receive(:references_per_project).
|
||||
and_return({ project.path_with_namespace => Set.new([1]) })
|
||||
|
||||
expect(filter.issues_per_project[project][1]).
|
||||
to be_an_instance_of(ExternalIssue)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue