# frozen_string_literal: true require 'spec_helper' RSpec.describe Banzai::Filter::FootnoteFilter, feature_category: :team_planning do include FilterSpecHelper using RSpec::Parameterized::TableSyntax # rubocop:disable Style/AsciiComments # first[^1] and second[^second] and third[^_😄_] # [^1]: one # [^second]: two # [^_😄_]: three # rubocop:enable Style/AsciiComments let(:footnote) do <<~EOF.strip_heredoc

first1 and second2 and third3

  1. one ↩

  2. two ↩

  3. \n
  4. three ↩

EOF end let(:filtered_footnote) do <<~EOF.strip_heredoc

first1 and second2 and third3

  1. one ↩

  2. two ↩

  3. three ↩

EOF end context 'when footnotes exist' do let(:doc) { filter(footnote) } let(:link_node) { doc.css('sup > a').first } let(:identifier) { link_node[:id].delete_prefix('fnref-1-') } it 'properly adds the necessary ids and classes' do expect(doc.to_html).to eq filtered_footnote.strip end context 'when GITLAB_TEST_FOOTNOTE_ID is set' do let(:test_footnote_id) { '42' } let(:identifier) { test_footnote_id } before do stub_env('GITLAB_TEST_FOOTNOTE_ID', test_footnote_id) end it 'uses the test footnote ID instead of a random number' do expect(doc.to_html).to eq filtered_footnote.strip end end end context 'when detecting footnotes' do where(:valid, :markdown) do true | "1. one[^1]\n[^1]: AbC" true | "1. one[^abc]\n[^abc]: AbC" false | '1. [one](#fnref-abc)' false | "1. one[^1]\n[^abc]: AbC" end with_them do it 'detects valid footnotes' do result = Banzai::Pipeline::FullPipeline.call(markdown, project: nil) expect(result[:output].at_css('section.footnotes').present?).to eq(valid) end end end end