discourse/spec/models/post_stripper_spec.rb

55 lines
1.5 KiB
Ruby

# frozen_string_literal: true
RSpec.describe PostStripper do
it "strips mentions in quotes" do
mention = '<a class="mention">@andrei</a>'
cooked = "<aside class='quote'>#{mention}</aside>"
fragment = Nokogiri::HTML5.fragment(cooked)
PostStripper.strip(fragment)
expect(fragment.to_s).to_not include(mention)
end
it "strips group mentions in quotes" do
group_mention = '<a class="mention-group">@moderators</a>'
cooked = "<aside class='quote'>#{group_mention}</aside>"
fragment = Nokogiri::HTML5.fragment(cooked)
PostStripper.strip(fragment)
expect(fragment.to_s).to_not include(group_mention)
end
it "strips oneboxes" do
onebox =
'<aside class="onebox">
Onebox content
</aside>'
cooked = "<p>#{onebox}</p>"
fragment = Nokogiri::HTML5.fragment(cooked)
PostStripper.strip(fragment)
expect(fragment.to_s).to_not include(onebox)
end
context "with plugins" do
after { DiscoursePluginRegistry.reset_register!(:post_strippers) }
it "runs strippers registered by plugins" do
plugin_element = '<div class="plugin_class"></div>'
block = Proc.new { |nokogiri_fragment| nokogiri_fragment.css(".plugin_class").remove }
plugin = OpenStruct.new(enabled?: true)
DiscoursePluginRegistry.register_post_stripper({ block: block }, plugin)
fragment = Nokogiri::HTML5.fragment("<p>#{plugin_element}</p>")
PostStripper.strip(fragment)
expect(fragment.to_s).to_not include(plugin_element)
end
end
end