require 'spec_helper' module Gitlab::Markdown describe IssueReferenceFilter do include FilterSpecHelper def helper IssuesHelper end let(:project) { create(:empty_project) } let(:issue) { create(:issue, project: project) } it 'requires project context' do expect { described_class.call('') }.to raise_error(ArgumentError, /:project/) end %w(pre code a style).each do |elem| it "ignores valid references contained inside '#{elem}' element" do exp = act = "<#{elem}>Issue #{issue.to_reference}" expect(filter(act).to_html).to eq exp end end context 'internal reference' do let(:reference) { issue.to_reference } it 'ignores valid references when using non-default tracker' do expect(project).to receive(:get_issue).with(issue.iid).and_return(nil) exp = act = "Issue #{reference}" expect(filter(act).to_html).to eq exp end it 'links to a valid reference' do doc = filter("Fixed #{reference}") expect(doc.css('a').first.attr('href')). to eq helper.url_for_issue(issue.iid, project) end it 'links with adjacent text' do doc = filter("Fixed (#{reference}.)") expect(doc.to_html).to match(/\(#{Regexp.escape(reference)}<\/a>\.\)/) end it 'ignores invalid issue IDs' do invalid = invalidate_reference(reference) exp = act = "Fixed #{invalid}" expect(filter(act).to_html).to eq exp end it 'includes a title attribute' do doc = filter("Issue #{reference}") expect(doc.css('a').first.attr('title')).to eq "Issue: #{issue.title}" end it 'escapes the title attribute' do issue.update_attribute(:title, %{">whatever#{Regexp.escape(reference)}<\/a>\.\)/) end it 'ignores invalid issue IDs on the referenced project' do exp = act = "Fixed #{invalidate_reference(reference)}" expect(filter(act).to_html).to eq exp end it 'adds to the results hash' do result = pipeline_result("Fixed #{reference}") expect(result[:references][:issue]).to eq [issue] end end end end