Skip to content
Snippets Groups Projects
Unverified Commit 1a1b8170 authored by Eugen Rochko's avatar Eugen Rochko Committed by GitHub
Browse files

Fix Announce activities of unknown statuses not fetching those statuses (#10065)

Regression from #9998
parent 147b4c2c
No related branches found
No related tags found
No related merge requests found
......@@ -150,8 +150,7 @@ class ActivityPub::Activity
end
end
# If the status is not from the actor, try to fetch it
return fetch_remote_original_status if value_or_id(first_of_value(@json['attributedTo'])) == @account.uri
fetch_remote_original_status
end
def fetch_remote_original_status
......
require 'rails_helper'
RSpec.describe ActivityPub::Activity::Announce do
let(:sender) { Fabricate(:account, followers_url: 'http://example.com/followers') }
let(:sender) { Fabricate(:account, followers_url: 'http://example.com/followers', uri: 'https://example.com/actor') }
let(:recipient) { Fabricate(:account) }
let(:status) { Fabricate(:status, account: recipient) }
......@@ -10,21 +10,29 @@ RSpec.describe ActivityPub::Activity::Announce do
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Announce',
actor: ActivityPub::TagManager.instance.uri_for(sender),
actor: 'https://example.com/actor',
object: object_json,
}.with_indifferent_access
end
subject { described_class.new(json, sender) }
before do
sender.update(uri: ActivityPub::TagManager.instance.uri_for(sender))
let(:unknown_object_json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'https://example.com/actor/hello-world',
type: 'Note',
attributedTo: 'https://example.com/actor',
content: 'Hello world',
to: 'http://example.com/followers',
}
end
subject { described_class.new(json, sender) }
describe '#perform' do
context 'when sender is followed by a local account' do
before do
Fabricate(:account).follow!(sender)
stub_request(:get, 'https://example.com/actor/hello-world').to_return(body: Oj.dump(unknown_object_json))
subject.perform
end
......@@ -38,10 +46,21 @@ RSpec.describe ActivityPub::Activity::Announce do
end
end
context 'an unknown status' do
let(:object_json) { 'https://example.com/actor/hello-world' }
it 'creates a reblog by sender of status' do
reblog = sender.statuses.first
expect(reblog).to_not be_nil
expect(reblog.reblog.text).to eq 'Hello world'
end
end
context 'self-boost of a previously unknown status with missing attributedTo' do
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
id: 'https://example.com/actor#bar',
type: 'Note',
content: 'Lorem ipsum',
to: 'http://example.com/followers',
......@@ -56,10 +75,10 @@ RSpec.describe ActivityPub::Activity::Announce do
context 'self-boost of a previously unknown status with correct attributedTo' do
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
id: 'https://example.com/actor#bar',
type: 'Note',
content: 'Lorem ipsum',
attributedTo: ActivityPub::TagManager.instance.uri_for(sender),
attributedTo: 'https://example.com/actor',
to: 'http://example.com/followers',
}
end
......@@ -98,7 +117,7 @@ RSpec.describe ActivityPub::Activity::Announce do
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
id: 'https://example.com/actor#bar',
type: 'Note',
content: 'Lorem ipsum',
to: 'http://example.com/followers',
......@@ -117,7 +136,7 @@ RSpec.describe ActivityPub::Activity::Announce do
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
id: 'https://example.com/actor#bar',
type: 'Note',
content: 'Lorem ipsum',
to: 'http://example.com/followers',
......@@ -137,7 +156,7 @@ RSpec.describe ActivityPub::Activity::Announce do
let(:object_json) do
{
id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join,
id: 'https://example.com/actor#bar',
type: 'Note',
content: 'Lorem ipsum',
to: 'http://example.com/followers',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment