# 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
-
one ↩
-
two ↩
\n-
three ↩
EOF
end
let(:filtered_footnote) do
<<~EOF.strip_heredoc
first and second and third
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