From 556837f1561bb8b806030cb39d7ed658a1a1eaca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Menrath?=
<99024746+Menrath@users.noreply.github.com>
Date: Tue, 24 Sep 2024 17:57:53 +0200
Subject: [PATCH] Fix the summary of converted object types to be treated as
HTML (#28629)
---
app/lib/activitypub/activity/create.rb | 10 +++-
.../fetch_remote_status_service_spec.rb | 57 ++++++++++++++++++-
2 files changed, 63 insertions(+), 4 deletions(-)
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index aae73e01e0f..09a8caf1fcc 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -342,7 +342,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def converted_text
- linkify([@status_parser.title.presence, @status_parser.spoiler_text.presence, @status_parser.url || @status_parser.uri].compact.join("\n\n"))
+ [formatted_title, @status_parser.spoiler_text.presence, formatted_url].compact.join("\n\n")
+ end
+
+ def formatted_title
+ "
#{@status_parser.title}
" if @status_parser.title.present?
+ end
+
+ def formatted_url
+ linkify(@status_parser.url || @status_parser.uri)
end
def unsupported_media_type?(mime_type)
diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb
index 635fcb7976c..9d8c6e0e0a6 100644
--- a/spec/services/activitypub/fetch_remote_status_service_spec.rb
+++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb
@@ -72,7 +72,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/watch?v=12345'
- expect(strip_tags(status.text)).to eq 'Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345'
+ expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix\n\nhttps://foo.bar/watch?v=12345"
end
end
@@ -105,7 +105,7 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/watch?v=12345'
- expect(strip_tags(status.text)).to eq 'Nyan Cat 10 hours remixhttps://foo.bar/watch?v=12345'
+ expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix\n\nhttps://foo.bar/watch?v=12345"
end
end
@@ -125,7 +125,58 @@ RSpec.describe ActivityPub::FetchRemoteStatusService do
expect(status).to_not be_nil
expect(status.url).to eq 'https://foo.bar/@foo/1234'
- expect(strip_tags(status.text)).to eq "Let's change the worldhttps://foo.bar/@foo/1234"
+ expect(strip_tags(status.text)).to eq "Let's change the world\n\nhttps://foo.bar/@foo/1234"
+ end
+ end
+
+ context 'with Event object that contains a HTML summary' do
+ let(:object) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: 'https://foo.bar/@foo/1234',
+ type: 'Event',
+ name: 'Fediverse Birthday Party',
+ startTime: '2024-01-31T20:00:00.000+01:00',
+ location: {
+ type: 'Place',
+ name: 'FooBar – The not converted location',
+ },
+ content: 'The not converted detailed description of the event object.',
+ summary: 'See you at the FooBar!
',
+ attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
+ }
+ end
+
+ it 'creates status' do
+ status = sender.statuses.first
+
+ expect(status).to_not be_nil
+ expect(status.url).to eq 'https://foo.bar/@foo/1234'
+ expect(status.text).to start_with "#{object[:name]}
\n\n#{object[:summary]}\n\n"
+ expect(status.text).to include "href=\"#{object[:id]}\""
+ end
+ end
+
+ context 'with Article object that contains a HTML summary' do
+ let(:object) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: 'https://foo.bar/blog/future-of-the-fediverse',
+ type: 'Article',
+ name: 'Future of the Fediverse',
+ content: 'Lorem Ipsum',
+ summary: 'Guest article by John Mastodon
The fediverse is great reading this you will find out why!
',
+ attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
+ }
+ end
+
+ it 'creates status' do
+ status = sender.statuses.first
+
+ expect(status).to_not be_nil
+ expect(status.url).to eq object[:id]
+ expect(status.text).to start_with "#{object[:name]}
\n\n#{object[:summary]}\n\n"
+ expect(status.text).to include "href=\"#{object[:id]}\""
end
end