Add experimental basic quote post authoring (#35355)
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe ActivityPub::Activity::Accept do
|
||||
let(:sender) { Fabricate(:account) }
|
||||
let(:sender) { Fabricate(:account, domain: 'example.com') }
|
||||
let(:recipient) { Fabricate(:account) }
|
||||
|
||||
describe '#perform' do
|
||||
@@ -48,5 +48,128 @@ RSpec.describe ActivityPub::Activity::Accept do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a QuoteRequest' do
|
||||
let(:status) { Fabricate(:status, account: recipient) }
|
||||
let(:quoted_status) { Fabricate(:status, account: sender) }
|
||||
let(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status) }
|
||||
let(:approval_uri) { "https://#{sender.domain}/approvals/1" }
|
||||
|
||||
let(:json) do
|
||||
{
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
{
|
||||
QuoteRequest: 'https://w3id.org/fep/044f#QuoteRequest',
|
||||
},
|
||||
],
|
||||
id: 'foo',
|
||||
type: 'Accept',
|
||||
actor: ActivityPub::TagManager.instance.uri_for(sender),
|
||||
object: {
|
||||
id: quote.activity_uri,
|
||||
type: 'QuoteRequest',
|
||||
actor: ActivityPub::TagManager.instance.uri_for(recipient),
|
||||
object: ActivityPub::TagManager.instance.uri_for(quoted_status),
|
||||
instrument: ActivityPub::TagManager.instance.uri_for(status),
|
||||
},
|
||||
result: approval_uri,
|
||||
}.with_indifferent_access
|
||||
end
|
||||
|
||||
it 'marks the quote as approved and distribute an update' do
|
||||
expect { subject.perform }
|
||||
.to change { quote.reload.accepted? }.from(false).to(true)
|
||||
.and change { quote.reload.approval_uri }.to(approval_uri)
|
||||
expect(DistributionWorker)
|
||||
.to have_enqueued_sidekiq_job(status.id, { 'update' => true })
|
||||
expect(ActivityPub::StatusUpdateDistributionWorker)
|
||||
.to have_enqueued_sidekiq_job(status.id, { 'updated_at' => be_a(String) })
|
||||
end
|
||||
|
||||
context 'when the quoted status is not from the sender of the Accept' do
|
||||
let(:quoted_status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com')) }
|
||||
|
||||
it 'does not mark the quote as approved and does not distribute an update' do
|
||||
expect { subject.perform }
|
||||
.to not_change { quote.reload.accepted? }.from(false)
|
||||
.and not_change { quote.reload.approval_uri }.from(nil)
|
||||
expect(DistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, { 'update' => true })
|
||||
expect(ActivityPub::StatusUpdateDistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, anything)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the quoting status is from an unrelated user' do
|
||||
let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'foobar.com')) }
|
||||
|
||||
it 'does not mark the quote as approved and does not distribute an update' do
|
||||
expect { subject.perform }
|
||||
.to not_change { quote.reload.accepted? }.from(false)
|
||||
.and not_change { quote.reload.approval_uri }.from(nil)
|
||||
expect(DistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, { 'update' => true })
|
||||
expect(ActivityPub::StatusUpdateDistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, anything)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when approval_uri is missing' do
|
||||
let(:approval_uri) { nil }
|
||||
|
||||
it 'does not mark the quote as approved and does not distribute an update' do
|
||||
expect { subject.perform }
|
||||
.to not_change { quote.reload.accepted? }.from(false)
|
||||
.and not_change { quote.reload.approval_uri }.from(nil)
|
||||
expect(DistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, { 'update' => true })
|
||||
expect(ActivityPub::StatusUpdateDistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, anything)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the QuoteRequest is referenced by its identifier' do
|
||||
let(:json) do
|
||||
{
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
{
|
||||
QuoteRequest: 'https://w3id.org/fep/044f#QuoteRequest',
|
||||
},
|
||||
],
|
||||
id: 'foo',
|
||||
type: 'Accept',
|
||||
actor: ActivityPub::TagManager.instance.uri_for(sender),
|
||||
object: quote.activity_uri,
|
||||
result: approval_uri,
|
||||
}.with_indifferent_access
|
||||
end
|
||||
|
||||
it 'marks the quote as approved and distribute an update' do
|
||||
expect { subject.perform }
|
||||
.to change { quote.reload.accepted? }.from(false).to(true)
|
||||
.and change { quote.reload.approval_uri }.to(approval_uri)
|
||||
expect(DistributionWorker)
|
||||
.to have_enqueued_sidekiq_job(status.id, { 'update' => true })
|
||||
expect(ActivityPub::StatusUpdateDistributionWorker)
|
||||
.to have_enqueued_sidekiq_job(status.id, { 'updated_at' => be_a(String) })
|
||||
end
|
||||
|
||||
context 'when approval_uri is missing' do
|
||||
let(:approval_uri) { nil }
|
||||
|
||||
it 'does not mark the quote as approved and does not distribute an update' do
|
||||
expect { subject.perform }
|
||||
.to not_change { quote.reload.accepted? }.from(false)
|
||||
.and not_change { quote.reload.approval_uri }.from(nil)
|
||||
expect(DistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, { 'update' => true })
|
||||
expect(ActivityPub::StatusUpdateDistributionWorker)
|
||||
.to_not have_enqueued_sidekiq_job(status.id, anything)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -125,5 +125,27 @@ RSpec.describe ActivityPub::Activity::Reject do
|
||||
expect(relay.reload.rejected?).to be true
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a QuoteRequest' do
|
||||
let(:status) { Fabricate(:status, account: recipient) }
|
||||
let(:quoted_status) { Fabricate(:status, account: sender) }
|
||||
let(:quote) { Fabricate(:quote, status: status, quoted_status: quoted_status, activity_uri: 'https://abc-123/456') }
|
||||
let(:approval_uri) { "https://#{sender.domain}/approvals/1" }
|
||||
|
||||
let(:object_json) do
|
||||
{
|
||||
id: 'https://abc-123/456',
|
||||
type: 'QuoteRequest',
|
||||
actor: ActivityPub::TagManager.instance.uri_for(recipient),
|
||||
object: ActivityPub::TagManager.instance.uri_for(quoted_status),
|
||||
instrument: ActivityPub::TagManager.instance.uri_for(status),
|
||||
}.with_indifferent_access
|
||||
end
|
||||
|
||||
it 'marks the quote as rejected' do
|
||||
expect { subject.perform }
|
||||
.to change { quote.reload.rejected? }.from(false).to(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user