# 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() 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() assert_equal "
#{attachment_html}
", content_from_html(html).to_html end test "canonicalizes nested attachment gallery markup" do attachment_html = '' html = %Q(
) 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