discourse/spec/integrity/common_mark_spec.rb
Martin Brennan 7c97548159
FIX: Fix incorrect hashtag setting migration (#19857)
Added in c2013865d7,
this migration was supposed to only turn off the hashtag
setting for existing sites (since that was the old default)
but its doing it for new ones too because we run all migrations
on new sites.

Instead, we should only run this if the first migration was
only just created, meaning its a new site.
2023-01-16 10:53:00 +10:00

77 lines
2.4 KiB
Ruby

# frozen_string_literal: true
RSpec.describe "CommonMark" do
it "passes spec" do
SiteSetting.traditional_markdown_linebreaks = true
SiteSetting.enable_markdown_typographer = false
SiteSetting.highlighted_languages = "ruby|aa"
# TODO (martin) Remove when enable_experimental_hashtag_autocomplete is default for all sites
SiteSetting.enable_experimental_hashtag_autocomplete = false
html, state, md = nil
failed = 0
File
.readlines(Rails.root + "spec/fixtures/md/spec.txt")
.each do |line|
if line == "```````````````````````````````` example\n"
state = :example
next
end
if line == "````````````````````````````````\n"
md.gsub!("", "\t")
html ||= String.new
html.gsub!("", "\t")
html.strip!
# normalize brs
html.gsub!("<br />", "<br>")
html.gsub!("<hr />", "<hr>")
html.gsub!(%r{<img([^>]+) />}, "<img\\1>")
SiteSetting.enable_markdown_linkify = false
cooked = PrettyText.markdown(md, sanitize: false)
cooked.strip!
cooked.gsub!(" class=\"lang-auto\"", "")
cooked.gsub!(%r{<span class="hashtag">(.*)</span>}, "\\1")
cooked.gsub!(%r{<a name="(.*)" class="anchor" href="#\1*"></a>}, "")
# we support data-attributes which is not in the spec
cooked.gsub!("<pre data-code-startline=\"3\">", "<pre>")
# we don't care about this
cooked.gsub!("<blockquote>\n</blockquote>", "<blockquote></blockquote>")
html.gsub!("<blockquote>\n</blockquote>", "<blockquote></blockquote>")
html.gsub!("language-ruby", "lang-ruby")
html.gsub!("language-aa", "lang-aa")
# strip out unsupported languages
html.gsub!(%r{ class="language-[;f].*"}, "")
unless cooked == html
failed += 1
puts "FAILED SPEC"
puts "Expected: "
puts html
puts "Got: "
puts cooked
puts "Markdown: "
puts md
puts
end
html, state, md = nil
next
end
if state == :example && line == ".\n"
state = :html
next
end
md = (md || String.new) << line if state == :example
html = (html || String.new) << line if state == :html
end
expect(failed).to eq(0)
end
end