# frozen_string_literal: true
require "spec_helper"
describe Kitabu::Footnotes::HTML do
let(:footnotes) do
Kitabu::Markdown.render <<-MARKDOWN.strip_heredoc
ohai[^1] and kthxbai[^2]
ohai[^1] again.
[^1]: Hello
[^2]: OK, thanks. Bye!
MARKDOWN
end
let(:content) do
<<-HTML.strip_heredoc
#{footnotes}
#{footnotes}
HTML
end
let(:html) do
Kitabu::Footnotes::HTML.process(content).html
end
let(:chapter1) { html.css(".chapter:first-of-type").first }
let(:chapter2) { html.css(".chapter:last-of-type").first }
it "sets starting index" do
expect(chapter1).to have_tag('.footnotes ol[start="1"]')
expect(chapter2).to have_tag('.footnotes ol[start="3"]')
end
it "sets footnotes id" do
html.css(".footnotes li").to_enum(:each).with_index(1) do |footnote, index|
expect(footnote.get_attribute("id")).to eq("fn#{index}")
end
end
it "removes id from existing " do
expect(chapter1).to have_tag("sup:not([id])", count: 1)
expect(chapter2).to have_tag("sup:not([id])", count: 1)
end
it "sets id" do
expect(chapter1).to have_tag("sup", count: 3)
expect(chapter1).to have_tag("sup[id=fnref1]", count: 1)
expect(chapter1).to have_tag("sup[id=fnref2]", count: 1)
expect(chapter2).to have_tag("sup", count: 3)
expect(chapter2).to have_tag("sup[id=fnref3]", count: 1)
expect(chapter2).to have_tag("sup[id=fnref4]", count: 1)
end
it "updates link to footnote" do
expect(chapter1).to have_tag("sup:nth-child(1) > a", text: "1", count: 2)
expect(chapter1).to have_tag("sup:nth-child(2) > a", text: "2", count: 1)
expect(chapter2).to have_tag("sup:nth-child(1) > a", text: "3", count: 2)
expect(chapter2).to have_tag("sup:nth-child(2) > a", text: "4", count: 1)
end
it "sets footnote link-back" do
expect(chapter1).to have_tag('.footnotes li:nth-child(1) a[href="#fnref1"]')
expect(chapter1).to have_tag('.footnotes li:nth-child(2) a[href="#fnref2"]')
expect(chapter2).to have_tag('.footnotes li:nth-child(1) a[href="#fnref3"]')
expect(chapter2).to have_tag('.footnotes li:nth-child(2) a[href="#fnref4"]')
end
end