From d2a0196fe299bb7e67f596f51c1f8d2a1fea3f81 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Mon, 11 Aug 2025 17:33:19 -0400 Subject: [PATCH 1/2] Backfill tests for ExcerptHelper --- test/helpers/excerpt_helper_test.rb | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/helpers/excerpt_helper_test.rb diff --git a/test/helpers/excerpt_helper_test.rb b/test/helpers/excerpt_helper_test.rb new file mode 100644 index 000000000..b3dff7a0b --- /dev/null +++ b/test/helpers/excerpt_helper_test.rb @@ -0,0 +1,30 @@ +require "test_helper" + +class ExcerptHelperTest < ActionView::TestCase + test "quote" do + assert_excerpt("> Hello world", "> Hello world") + end + + test "ul" do + assert_excerpt("• Hello world", "- Hello world") + assert_excerpt("• Hello world", " - Hello world") + end + + test "ol" do + assert_excerpt("99. Hello world", "99. Hello world") + end + + test "large spaces" do + assert_excerpt("Hello world", " Hello world ") + end + + test "long text" do + assert_excerpt("A"*197 + "...", "A"*1000) + assert_excerpt("A"*97 + "...", "A"*1000, length: 100) + end + + private + def assert_excerpt(expected, content, ...) + assert_equal expected, format_excerpt(ActionText::Content.new(content), ...), "Excerpt of Action Text Content does not match" + end +end From d2da1dcc06cd700471341f634409c5b48d216b20 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Mon, 11 Aug 2025 17:38:24 -0400 Subject: [PATCH 2/2] Make ExcerptHelper work for String inputs --- app/helpers/excerpt_helper.rb | 4 ++-- test/helpers/excerpt_helper_test.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/helpers/excerpt_helper.rb b/app/helpers/excerpt_helper.rb index 9ae0d3274..b48986c26 100644 --- a/app/helpers/excerpt_helper.rb +++ b/app/helpers/excerpt_helper.rb @@ -2,9 +2,9 @@ module ExcerptHelper def format_excerpt(content, length: 200) return "" if content.blank? - text = content.to_plain_text + text = content.respond_to?(:to_plain_text) ? content.to_plain_text : content.to_s text = text.gsub(/^>\s*(.*)$/m, '> \1') - text = text.gsub(/^[-*]\s*(.*)$/m, '• \1') + text = text.gsub(/^\s*[-+]\s*(.*)$/m, '• \1') text = text.gsub(/^\d+\.\s*(.*)$/m) { |m| m } text = text.gsub(/\s+/, " ").strip text.truncate(length) diff --git a/test/helpers/excerpt_helper_test.rb b/test/helpers/excerpt_helper_test.rb index b3dff7a0b..ef685680b 100644 --- a/test/helpers/excerpt_helper_test.rb +++ b/test/helpers/excerpt_helper_test.rb @@ -26,5 +26,6 @@ class ExcerptHelperTest < ActionView::TestCase private def assert_excerpt(expected, content, ...) assert_equal expected, format_excerpt(ActionText::Content.new(content), ...), "Excerpt of Action Text Content does not match" + assert_equal expected, format_excerpt(content, ...), "Excerpt of String does not match" end end