Compare commits

..

6 Commits

Author SHA1 Message Date
Claire
32acc2e197
Merge bf2d991412 into 74fc4dbacf 2025-07-15 16:56:42 +00:00
Claire
bf2d991412 Add experimental ability to quote statuses to REST API
Some checks failed
Chromatic / Run Chromatic (push) Has been cancelled
2025-07-15 18:56:35 +02:00
Claire
7a7c9f760e Add basic handling for incoming Reject(QuoteRequest) 2025-07-15 18:56:34 +02:00
Claire
3188add293 [Improvable] Send QuoteRequest when quoting post from remote server 2025-07-15 18:56:34 +02:00
Claire
f1129ae8a0 Serialize quotes over ActivityPub 2025-07-15 18:56:34 +02:00
Claire
b8fd7a6b26 Handle incoming Accept(QuoteRequest) 2025-07-15 18:56:34 +02:00
2 changed files with 22 additions and 50 deletions

View File

@ -84,7 +84,7 @@ RSpec.describe ActivityPub::Activity::Accept do
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) })
.to have_enqueued_sidekiq_job(status.id, { 'update_id' => be_a(String) })
end
context 'when the quoted status is not from the sender of the Accept' do
@ -153,7 +153,7 @@ RSpec.describe ActivityPub::Activity::Accept do
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) })
.to have_enqueued_sidekiq_job(status.id, { 'update_id' => be_a(String) })
end
context 'when approval_uri is missing' do

View File

@ -9,64 +9,36 @@ RSpec.describe ActivityPub::StatusUpdateDistributionWorker do
let(:follower) { Fabricate(:account, protocol: :activitypub, inbox_url: 'http://example.com', domain: 'example.com') }
describe '#perform' do
context 'with an explicitly edited status' do
before do
follower.follow!(status.account)
status.snapshot!
status.text = 'bar'
status.edited_at = Time.now.utc
status.snapshot!
status.save!
end
context 'with public status' do
before do
follower.follow!(status.account)
status.snapshot!
status.text = 'bar'
status.edited_at = Time.now.utc
status.snapshot!
status.save!
status.update(visibility: :public)
end
context 'with public status' do
before do
status.update(visibility: :public)
end
it 'delivers to followers' do
expect { subject.perform(status.id) }
.to enqueue_sidekiq_job(ActivityPub::DeliveryWorker).with(match_json_values(type: 'Update'), status.account_id, 'http://example.com', anything)
end
end
context 'with private status' do
before do
status.update(visibility: :private)
end
it 'delivers to followers' do
expect { subject.perform(status.id) }
.to enqueue_sidekiq_job(ActivityPub::DeliveryWorker).with(match_json_values(type: 'Update'), status.account_id, 'http://example.com', anything)
it 'delivers to followers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[match_json_values(type: 'Update'), status.account.id, 'http://example.com', anything]]) do
subject.perform(status.id)
end
end
end
context 'with an implicitly edited status' do
context 'with private status' do
before do
follower.follow!(status.account)
status.update(visibility: :private)
end
context 'with public status' do
before do
status.update(visibility: :public)
end
it 'delivers to followers' do
expect { subject.perform(status.id, { 'updated_at' => Time.now.utc.iso8601 }) }
.to enqueue_sidekiq_job(ActivityPub::DeliveryWorker).with(match_json_values(type: 'Update'), status.account_id, 'http://example.com', anything)
end
end
context 'with private status' do
before do
status.update(visibility: :private)
end
it 'delivers to followers' do
expect { subject.perform(status.id, { 'updated_at' => Time.now.utc.iso8601 }) }
.to enqueue_sidekiq_job(ActivityPub::DeliveryWorker).with(match_json_values(type: 'Update'), status.account_id, 'http://example.com', anything)
it 'delivers to followers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[match_json_values(type: 'Update'), status.account.id, 'http://example.com', anything]]) do
subject.perform(status.id)
end
end
end