# frozen_string_literal: true
require "test_helper"
class ActionText::ContentTest < ActiveSupport::TestCase
test "equality" do
html = "
test
"
content = content_from_html(html)
assert_equal content, content_from_html(html)
assert_not_equal content, html
end
test "marshal serialization" do
content = content_from_html("Hello!")
assert_equal content, Marshal.load(Marshal.dump(content))
end
test "roundtrips HTML without additional newlines" do
html = "
a
"
content = content_from_html(html)
assert_equal html, content.to_html
end
test "extracts links" do
html = '1 1'
content = content_from_html(html)
assert_equal ["http://example.com/1"], content.links
end
test "extracts attachables" do
attachable = create_file_blob(filename: "racecar.jpg", content_type: "image/jpg")
html = %Q()
content = content_from_html(html)
assert_equal 1, content.attachments.size
attachment = content.attachments.first
assert_equal "Captioned", attachment.caption
assert_equal attachable, attachment.attachable
end
test "extracts remote image attachables" do
html = ''
content = content_from_html(html)
assert_equal 1, content.attachments.size
attachment = content.attachments.first
assert_equal "Captioned", attachment.caption
attachable = attachment.attachable
assert_kind_of ActionText::Attachables::RemoteImage, attachable
assert_equal "http://example.com/cat.jpg", attachable.url
assert_equal "100", attachable.width
assert_equal "100", attachable.height
end
test "identifies destroyed attachables as missing" do
attachable = create_file_blob(filename: "racecar.jpg", content_type: "image/jpg")
html = %Q()
attachable.destroy!
content = content_from_html(html)
assert_equal 1, content.attachments.size
assert_equal ActionText::Attachables::MissingAttachable, content.attachments.first.attachable
end
test "extracts missing attachables" do
html = ''
content = content_from_html(html)
assert_equal 1, content.attachments.size
assert_equal ActionText::Attachables::MissingAttachable, content.attachments.first.attachable
end
test "converts Trix-formatted attachments" do
html = %Q()
content = content_from_html(html)
assert_equal 1, content.attachments.size
assert_equal '', content.to_html
end
test "ignores Trix-formatted attachments with malformed JSON" do
html = %Q()
content = content_from_html(html)
assert_equal 0, content.attachments.size
end
test "minifies attachment markup" do
html = '
HTML
'
assert_equal '', content_from_html(html).to_html
end
test "canonicalizes attachment gallery markup" do
attachment_html = ''
html = %Q(
#{attachment_html}
)
assert_equal "
#{attachment_html}
", content_from_html(html).to_html
end
test "canonicalizes attachment gallery markup with whitespace" do
attachment_html = %Q(\n \n \n)
html = %Q(
#{attachment_html}
)
assert_equal "
#{attachment_html}
", content_from_html(html).to_html
end
test "canonicalizes nested attachment gallery markup" do
attachment_html = ''
html = %Q(
#{attachment_html}
)
assert_equal "
#{attachment_html}
", content_from_html(html).to_html
end
test "renders with layout when ApplicationController is not defined" do
html = "
Hello world
"
rendered = content_from_html(html).to_rendered_html_with_layout
assert_includes rendered, html
assert_match %r/\A#{Regexp.escape '
'}/, rendered
assert_not defined?(::ApplicationController)
end
private
def content_from_html(html)
ActionText::Content.new(html).tap do |content|
assert_nothing_raised { content.to_s }
end
end
end