Refactor ActivityPub::Activity::Accept and ActivityPub::Activity::Reject specs (#35382)

This commit is contained in:
Claire 2025-07-15 15:18:37 +02:00 committed by GitHub
parent 0efb889a9c
commit 594976a538
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 125 additions and 165 deletions

View File

@ -6,48 +6,10 @@ RSpec.describe ActivityPub::Activity::Accept do
let(:sender) { Fabricate(:account) } let(:sender) { Fabricate(:account) }
let(:recipient) { Fabricate(:account) } let(:recipient) { Fabricate(:account) }
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Accept',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: {
id: 'bar',
type: 'Follow',
actor: ActivityPub::TagManager.instance.uri_for(recipient),
object: ActivityPub::TagManager.instance.uri_for(sender),
},
}.with_indifferent_access
end
describe '#perform' do describe '#perform' do
subject { described_class.new(json, sender) } subject { described_class.new(json, sender) }
before do context 'with a Follow request' do
allow(RemoteAccountRefreshWorker).to receive(:perform_async)
Fabricate(:follow_request, account: recipient, target_account: sender)
subject.perform
end
it 'creates a follow relationship' do
expect(recipient.following?(sender)).to be true
end
it 'removes the follow request' do
expect(recipient.requested?(sender)).to be false
end
it 'queues a refresh' do
expect(RemoteAccountRefreshWorker).to have_received(:perform_async).with(sender.id)
end
end
context 'when given a relay' do
subject { described_class.new(json, sender) }
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
let(:json) do let(:json) do
{ {
'@context': 'https://www.w3.org/ns/activitystreams', '@context': 'https://www.w3.org/ns/activitystreams',
@ -60,12 +22,31 @@ RSpec.describe ActivityPub::Activity::Accept do
actor: ActivityPub::TagManager.instance.uri_for(recipient), actor: ActivityPub::TagManager.instance.uri_for(recipient),
object: ActivityPub::TagManager.instance.uri_for(sender), object: ActivityPub::TagManager.instance.uri_for(sender),
}, },
}.with_indifferent_access }.deep_stringify_keys
end end
context 'with a regular Follow' do
before do
Fabricate(:follow_request, account: recipient, target_account: sender)
end
it 'creates a follow relationship, removes the follow request, and queues a refresh' do
expect { subject.perform }
.to change { recipient.following?(sender) }.from(false).to(true)
.and change { recipient.requested?(sender) }.from(true).to(false)
expect(RemoteAccountRefreshWorker).to have_enqueued_sidekiq_job(sender.id)
end
end
context 'when given a relay' do
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
it 'marks the relay as accepted' do it 'marks the relay as accepted' do
subject.perform expect { subject.perform }
expect(relay.reload.accepted?).to be true .to change { relay.reload.accepted? }.from(false).to(true)
end
end
end end
end end
end end

View File

@ -5,6 +5,21 @@ require 'rails_helper'
RSpec.describe ActivityPub::Activity::Reject do RSpec.describe ActivityPub::Activity::Reject do
let(:sender) { Fabricate(:account) } let(:sender) { Fabricate(:account) }
let(:recipient) { Fabricate(:account) } let(:recipient) { Fabricate(:account) }
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Reject',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: object_json,
}.deep_stringify_keys
end
describe '#perform' do
subject { described_class.new(json, sender) }
context 'when rejecting a Follow' do
let(:object_json) do let(:object_json) do
{ {
id: 'bar', id: 'bar',
@ -14,46 +29,27 @@ RSpec.describe ActivityPub::Activity::Reject do
} }
end end
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Reject',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: object_json,
}.with_indifferent_access
end
describe '#perform' do
subject { described_class.new(json, sender) }
context 'when rejecting a pending follow request by target' do context 'when rejecting a pending follow request by target' do
before do before do
Fabricate(:follow_request, account: recipient, target_account: sender) Fabricate(:follow_request, account: recipient, target_account: sender)
subject.perform
end end
it 'does not create a follow relationship' do it 'removes the follow request without creating a follow relationship' do
expect(recipient.following?(sender)).to be false expect { subject.perform }
end .to change { recipient.requested?(sender) }.from(true).to(false)
.and not_change { recipient.following?(sender) }.from(false)
it 'removes the follow request' do
expect(recipient.requested?(sender)).to be false
end end
end end
context 'when rejecting a pending follow request by uri' do context 'when rejecting a pending follow request by uri' do
before do before do
Fabricate(:follow_request, account: recipient, target_account: sender, uri: 'bar') Fabricate(:follow_request, account: recipient, target_account: sender, uri: 'bar')
subject.perform
end end
it 'does not create a follow relationship' do it 'removes the follow request without creating a follow relationship' do
expect(recipient.following?(sender)).to be false expect { subject.perform }
end .to change { recipient.requested?(sender) }.from(true).to(false)
.and not_change { recipient.following?(sender) }.from(false)
it 'removes the follow request' do
expect(recipient.requested?(sender)).to be false
end end
end end
@ -62,45 +58,36 @@ RSpec.describe ActivityPub::Activity::Reject do
before do before do
Fabricate(:follow_request, account: recipient, target_account: sender, uri: 'bar') Fabricate(:follow_request, account: recipient, target_account: sender, uri: 'bar')
subject.perform
end end
it 'does not create a follow relationship' do it 'removes the follow request without creating a follow relationship' do
expect(recipient.following?(sender)).to be false expect { subject.perform }
end .to change { recipient.requested?(sender) }.from(true).to(false)
.and not_change { recipient.following?(sender) }.from(false)
it 'removes the follow request' do
expect(recipient.requested?(sender)).to be false
end end
end end
context 'when rejecting an existing follow relationship by target' do context 'when rejecting an existing follow relationship by target' do
before do before do
Fabricate(:follow, account: recipient, target_account: sender) Fabricate(:follow, account: recipient, target_account: sender)
subject.perform
end end
it 'removes the follow relationship' do it 'removes the follow relationship without creating a request' do
expect(recipient.following?(sender)).to be false expect { subject.perform }
end .to change { recipient.following?(sender) }.from(true).to(false)
.and not_change { recipient.requested?(sender) }.from(false)
it 'does not create a follow request' do
expect(recipient.requested?(sender)).to be false
end end
end end
context 'when rejecting an existing follow relationship by uri' do context 'when rejecting an existing follow relationship by uri' do
before do before do
Fabricate(:follow, account: recipient, target_account: sender, uri: 'bar') Fabricate(:follow, account: recipient, target_account: sender, uri: 'bar')
subject.perform
end end
it 'removes the follow relationship' do it 'removes the follow relationship without creating a request' do
expect(recipient.following?(sender)).to be false expect { subject.perform }
end .to change { recipient.following?(sender) }.from(true).to(false)
.and not_change { recipient.requested?(sender) }.from(false)
it 'does not create a follow request' do
expect(recipient.requested?(sender)).to be false
end end
end end
@ -109,15 +96,12 @@ RSpec.describe ActivityPub::Activity::Reject do
before do before do
Fabricate(:follow, account: recipient, target_account: sender, uri: 'bar') Fabricate(:follow, account: recipient, target_account: sender, uri: 'bar')
subject.perform
end end
it 'removes the follow relationship' do it 'removes the follow relationship without creating a request' do
expect(recipient.following?(sender)).to be false expect { subject.perform }
end .to change { recipient.following?(sender) }.from(true).to(false)
.and not_change { recipient.requested?(sender) }.from(false)
it 'does not create a follow request' do
expect(recipient.requested?(sender)).to be false
end end
end end
end end
@ -127,18 +111,12 @@ RSpec.describe ActivityPub::Activity::Reject do
let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') } let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
let(:json) do let(:object_json) do
{ {
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Reject',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: {
id: 'https://abc-123/456', id: 'https://abc-123/456',
type: 'Follow', type: 'Follow',
actor: ActivityPub::TagManager.instance.uri_for(recipient), actor: ActivityPub::TagManager.instance.uri_for(recipient),
object: ActivityPub::TagManager.instance.uri_for(sender), object: ActivityPub::TagManager.instance.uri_for(sender),
},
}.with_indifferent_access }.with_indifferent_access
end end
@ -148,3 +126,4 @@ RSpec.describe ActivityPub::Activity::Reject do
end end
end end
end end
end