2018-10-08 17:44:25 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-01-04 19:43:11 -05:00
|
|
|
require "test_helper"
|
2018-10-02 13:56:27 -04:00
|
|
|
|
|
|
|
class ActionText::ModelTest < ActiveSupport::TestCase
|
2018-10-04 08:00:38 -04:00
|
|
|
test "html conversion" do
|
|
|
|
message = Message.new(subject: "Greetings", content: "<h1>Hello world</h1>")
|
|
|
|
assert_equal %Q(<div class="trix-content">\n <h1>Hello world</h1>\n</div>\n), "#{message.content}"
|
|
|
|
end
|
|
|
|
|
2018-10-02 13:56:27 -04:00
|
|
|
test "plain text conversion" do
|
|
|
|
message = Message.new(subject: "Greetings", content: "<h1>Hello world</h1>")
|
2018-10-04 08:00:38 -04:00
|
|
|
assert_equal "Hello world", message.content.to_plain_text
|
2018-10-02 13:56:27 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "without content" do
|
|
|
|
message = Message.create!(subject: "Greetings")
|
2018-10-04 08:00:38 -04:00
|
|
|
assert message.content.nil?
|
|
|
|
assert message.content.blank?
|
|
|
|
assert message.content.empty?
|
2019-12-04 22:12:26 -05:00
|
|
|
assert_not message.content?
|
2018-10-04 08:00:38 -04:00
|
|
|
assert_not message.content.present?
|
2018-10-02 13:56:27 -04:00
|
|
|
end
|
|
|
|
|
2018-12-20 20:04:30 -05:00
|
|
|
test "with blank content" do
|
|
|
|
message = Message.create!(subject: "Greetings", content: "")
|
|
|
|
assert_not message.content.nil?
|
|
|
|
assert message.content.blank?
|
|
|
|
assert message.content.empty?
|
2019-12-04 22:12:26 -05:00
|
|
|
assert_not message.content?
|
2018-12-20 20:04:30 -05:00
|
|
|
assert_not message.content.present?
|
|
|
|
end
|
|
|
|
|
2018-10-02 13:56:27 -04:00
|
|
|
test "embed extraction" do
|
2021-03-05 13:14:11 -05:00
|
|
|
blob = create_file_blob(filename: "racecar.jpg", content_type: "image/jpeg")
|
2018-10-02 13:56:27 -04:00
|
|
|
message = Message.create!(subject: "Greetings", content: ActionText::Content.new("Hello world").append_attachables(blob))
|
|
|
|
assert_equal "racecar.jpg", message.content.embeds.first.filename.to_s
|
|
|
|
end
|
|
|
|
|
2019-01-25 16:44:35 -05:00
|
|
|
test "embed extraction only extracts file attachments" do
|
|
|
|
remote_image_html = '<action-text-attachment content-type="image" url="http://example.com/cat.jpg"></action-text-attachment>'
|
2021-03-05 13:14:11 -05:00
|
|
|
blob = create_file_blob(filename: "racecar.jpg", content_type: "image/jpeg")
|
2019-01-25 16:44:35 -05:00
|
|
|
content = ActionText::Content.new(remote_image_html).append_attachables(blob)
|
|
|
|
message = Message.create!(subject: "Greetings", content: content)
|
|
|
|
assert_equal [ActionText::Attachables::RemoteImage, ActiveStorage::Blob], message.content.body.attachables.map(&:class)
|
|
|
|
assert_equal [ActiveStorage::Attachment], message.content.embeds.map(&:class)
|
|
|
|
end
|
|
|
|
|
2019-05-17 16:42:21 -04:00
|
|
|
test "embed extraction deduplicates file attachments" do
|
2021-03-05 13:14:11 -05:00
|
|
|
blob = create_file_blob(filename: "racecar.jpg", content_type: "image/jpeg")
|
2019-05-17 16:42:21 -04:00
|
|
|
content = ActionText::Content.new("Hello world").append_attachables([ blob, blob ])
|
|
|
|
|
|
|
|
assert_nothing_raised do
|
|
|
|
Message.create!(subject: "Greetings", content: content)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-10-02 13:56:27 -04:00
|
|
|
test "saving content" do
|
|
|
|
message = Message.create!(subject: "Greetings", content: "<h1>Hello world</h1>")
|
2018-10-04 08:00:38 -04:00
|
|
|
assert_equal "Hello world", message.content.to_plain_text
|
2018-05-29 10:13:49 -04:00
|
|
|
end
|
2018-10-05 23:47:10 -04:00
|
|
|
|
2019-03-17 17:22:46 -04:00
|
|
|
test "saving body" do
|
2018-10-05 23:47:10 -04:00
|
|
|
message = Message.create(subject: "Greetings", body: "<h1>Hello world</h1>")
|
|
|
|
assert_equal "Hello world", message.body.to_plain_text
|
|
|
|
end
|
2019-03-17 17:22:46 -04:00
|
|
|
|
|
|
|
test "saving content via nested attributes" do
|
|
|
|
message = Message.create! subject: "Greetings", content: "<h1>Hello world</h1>",
|
|
|
|
review_attributes: { author_name: "Marcia", content: "Nice work!" }
|
|
|
|
assert_equal "Nice work!", message.review.content.to_plain_text
|
|
|
|
end
|
|
|
|
|
|
|
|
test "updating content via nested attributes" do
|
|
|
|
message = Message.create! subject: "Greetings", content: "<h1>Hello world</h1>",
|
|
|
|
review_attributes: { author_name: "Marcia", content: "Nice work!" }
|
|
|
|
|
|
|
|
message.update! review_attributes: { id: message.review.id, content: "Great work!" }
|
|
|
|
assert_equal "Great work!", message.review.reload.content.to_plain_text
|
|
|
|
end
|
2019-03-23 10:04:48 -04:00
|
|
|
|
|
|
|
test "building content lazily on existing record" do
|
|
|
|
message = Message.create!(subject: "Greetings")
|
|
|
|
|
|
|
|
assert_no_difference -> { ActionText::RichText.count } do
|
|
|
|
assert_kind_of ActionText::RichText, message.content
|
|
|
|
end
|
|
|
|
end
|
2020-11-24 12:19:46 -05:00
|
|
|
|
|
|
|
test "eager loading" do
|
|
|
|
Message.create!(subject: "Subject", content: "<h1>Content</h1>")
|
|
|
|
|
|
|
|
message = assert_queries(2) { Message.with_rich_text_content.last }
|
|
|
|
assert_no_queries do
|
|
|
|
assert_equal "Content", message.content.to_plain_text
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "eager loading all rich text" do
|
|
|
|
Message.create!(subject: "Subject", content: "<h1>Content</h1>", body: "<h2>Body</h2>")
|
|
|
|
|
|
|
|
message = assert_queries(1) { Message.with_all_rich_text.last }
|
|
|
|
assert_no_queries do
|
|
|
|
assert_equal "Content", message.content.to_plain_text
|
|
|
|
assert_equal "Body", message.body.to_plain_text
|
|
|
|
end
|
|
|
|
end
|
2018-05-29 10:13:49 -04:00
|
|
|
end
|