# frozen_string_literal: true require 'spec_helper' describe Banzai::Filter::ExternalIssueReferenceFilter do include FilterSpecHelper def helper IssuesHelper end shared_examples_for "external issue tracker" do it_behaves_like 'a reference containing an element node' 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 #{reference}" expect(filter(act).to_html).to eq exp end end it 'ignores valid references when using default tracker' do expect(project).to receive(:default_issues_tracker?).and_return(true) exp = act = "Issue #{reference}" expect(filter(act).to_html).to eq exp end it 'links to a valid reference' do doc = filter("Issue #{reference}") issue_id = doc.css('a').first.attr("data-external-issue") expect(doc.css('a').first.attr('href')) .to eq helper.url_for_issue(issue_id, project) end it 'links to the external tracker' do doc = filter("Issue #{reference}") link = doc.css('a').first.attr('href') issue_id = doc.css('a').first.attr("data-external-issue") expect(link).to eq(helper.url_for_issue(issue_id, project)) end it 'links with adjacent text' do doc = filter("Issue (#{reference}.)") expect(doc.to_html).to match(%r{\(#{reference}\.\)}) end it 'includes a title attribute' do doc = filter("Issue #{reference}") expect(doc.css('a').first.attr('title')).to include("Issue in #{project.issues_tracker.title}") end it 'escapes the title attribute' do allow(project.external_issue_tracker).to receive(:title) .and_return(%{">whatever