2
0

Fix quote posts with CW and no text being rejected

Fixes #36077
This commit is contained in:
Claire
2025-09-12 14:25:56 +02:00
parent 6044270d69
commit 48f55e3224
4 changed files with 66 additions and 10 deletions

View File

@@ -887,6 +887,33 @@ RSpec.describe ActivityPub::Activity::Create do
end
end
context 'with an unverifiable quote of a known post, with summary (CW) but no text' do
let(:quoted_status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com')) }
let(:object_json) do
build_object(
type: 'Note',
summary: 'beware of what she said',
content: nil,
quote: ActivityPub::TagManager.instance.uri_for(quoted_status)
)
end
it 'creates a status with an unverified quote' do
expect { subject.perform }.to change(sender.statuses, :count).by(1)
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.spoiler_text).to eq 'beware of what she said'
expect(status.content).to eq ''
expect(status.quote).to_not be_nil
expect(status.quote).to have_attributes(
state: 'pending',
approval_uri: nil
)
end
end
context 'with an unverifiable quote of a known post' do
let(:quoted_status) { Fabricate(:status) }

View File

@@ -600,6 +600,39 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
end
end
context 'when the status keeps an unverifiable quote and removes text through an explicit update' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }
let!(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status) }
let(:payload) do
{
'@context': [
'https://www.w3.org/ns/activitystreams',
{
'@id': 'https://w3id.org/fep/044f#quote',
'@type': '@id',
},
{
'@id': 'https://w3id.org/fep/044f#quoteAuthorization',
'@type': '@id',
},
],
id: 'foo',
type: 'Note',
summary: 'Show more',
updated: '2021-09-08T22:39:25Z',
quote: ActivityPub::TagManager.instance.uri_for(quoted_status),
}
end
it 'updates the approval URI but does not verify the quote' do
expect { subject.call(status, json, json) }
.to change(status, :text).to('')
.and not_change(quote, :state).from('pending')
end
end
context 'when the status has an existing verified quote and removes an approval link through an explicit update' do
let(:quoted_account) { Fabricate(:account, domain: 'quoted.example.com') }
let(:quoted_status) { Fabricate(:status, account: quoted_account) }