require 'spec_helper' describe Banzai::Filter::SnippetReferenceFilter do include FilterSpecHelper let(:project) { create(:empty_project, :public) } let(:snippet) { create(:project_snippet, project: project) } let(:reference) { snippet.to_reference } 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}>Snippet #{reference}" expect(reference_filter(act).to_html).to eq exp end end context 'internal reference' do it 'links to a valid reference' do doc = reference_filter("See #{reference}") expect(doc.css('a').first.attr('href')).to eq urls .project_snippet_url(project, snippet) end it 'links with adjacent text' do doc = reference_filter("Snippet (#{reference}.)") expect(doc.to_html).to match(/\(#{Regexp.escape(reference)}<\/a>\.\)/) end it 'ignores invalid snippet IDs' do exp = act = "Snippet #{invalidate_reference(reference)}" expect(reference_filter(act).to_html).to eq exp end it 'includes a title attribute' do doc = reference_filter("Snippet #{reference}") expect(doc.css('a').first.attr('title')).to eq snippet.title end it 'escapes the title attribute' do snippet.update_attribute(:title, %{">whatever#{Regexp.escape(snippet.to_reference(project))}<\/a>\.\)/) end it 'ignores invalid snippet IDs on the referenced project' do act = "See #{invalidate_reference(reference)}" expect(reference_filter(act).to_html).to match(/#{Regexp.escape(invalidate_reference(reference))}<\/a>/) end end end