mirror of
https://github.com/mastodon/mastodon.git
synced 2026-04-24 07:10:12 -05:00
80 lines
2.9 KiB
Ruby
80 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe ActivityPub::AnnounceNoteSerializer do
|
|
subject { serialized_record_json(reblog, described_class, adapter: ActivityPub::Adapter, options:) }
|
|
|
|
let(:tag_manager) { ActivityPub::TagManager.instance }
|
|
let(:status) { Fabricate(:status, created_at: Time.utc(2026, 1, 27, 15, 29, 31)) }
|
|
let(:reblog) { Fabricate(:status, reblog: status, created_at: Time.utc(2026, 1, 27, 16, 21, 44)) }
|
|
let(:options) { {} }
|
|
|
|
it 'serializes to the expected json' do
|
|
expect(subject).to include({
|
|
'id' => tag_manager.activity_uri_for(reblog),
|
|
'type' => 'Announce',
|
|
'actor' => tag_manager.uri_for(reblog.account),
|
|
'published' => '2026-01-27T16:21:44Z',
|
|
'to' => ['https://www.w3.org/ns/activitystreams#Public'],
|
|
'cc' => [tag_manager.uri_for(status.account), a_string_matching(/followers$/)],
|
|
'object' => tag_manager.uri_for(status),
|
|
})
|
|
|
|
expect(subject).to_not have_key('target')
|
|
end
|
|
|
|
context 'when status is local and private' do
|
|
let(:status) { Fabricate(:status, visibility: :private, created_at: Time.utc(2026, 1, 27, 15, 29, 31)) }
|
|
let(:reblog) { Fabricate(:status, reblog: status, account: status.account, created_at: Time.utc(2026, 1, 27, 16, 21, 44)) }
|
|
|
|
context 'when inlining of private local status is allowed' do
|
|
shared_examples 'serialization with inlining' do
|
|
it 'serializes to the expected json' do
|
|
expect(subject).to include({
|
|
'id' => tag_manager.activity_uri_for(reblog),
|
|
'type' => 'Announce',
|
|
'actor' => tag_manager.uri_for(reblog.account),
|
|
'published' => '2026-01-27T16:21:44Z',
|
|
'to' => ['https://www.w3.org/ns/activitystreams#Public'],
|
|
'cc' => [tag_manager.uri_for(status.account), a_string_matching(/followers$/)],
|
|
'object' => a_hash_including(
|
|
'id' => tag_manager.uri_for(status)
|
|
),
|
|
})
|
|
|
|
expect(subject).to_not have_key('target')
|
|
end
|
|
end
|
|
|
|
context 'with `allow_inlining` explicitly set to `true`' do
|
|
let(:options) { { allow_inlining: true } }
|
|
|
|
it_behaves_like 'serialization with inlining'
|
|
end
|
|
|
|
context 'with `allow_inlining` unset' do
|
|
let(:options) { {} }
|
|
|
|
it_behaves_like 'serialization with inlining'
|
|
end
|
|
end
|
|
|
|
context 'when inlining is not allowed' do
|
|
let(:options) { { allow_inlining: false } }
|
|
|
|
it 'serializes to the expected json' do
|
|
expect(subject).to include({
|
|
'id' => tag_manager.activity_uri_for(reblog),
|
|
'type' => 'Announce',
|
|
'actor' => tag_manager.uri_for(reblog.account),
|
|
'published' => '2026-01-27T16:21:44Z',
|
|
'to' => ['https://www.w3.org/ns/activitystreams#Public'],
|
|
'cc' => [tag_manager.uri_for(status.account), a_string_matching(/followers$/)],
|
|
'object' => tag_manager.uri_for(status),
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|