about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-02-17 15:16:36 +0100
committerGitHub <noreply@github.com>2019-02-17 15:16:36 +0100
commit1a1b8170bbb1e8cfd5591a8ea8085de41fa90cc5 (patch)
tree24fef7cc84a45017bd6f8c44fa20390e49977f38
parent147b4c2c3afacd6ad9d5c1353c072861eaca5fd2 (diff)
Fix Announce activities of unknown statuses not fetching those statuses (#10065)
Regression from #9998
-rw-r--r--app/lib/activitypub/activity.rb3
-rw-r--r--spec/lib/activitypub/activity/announce_spec.rb43
2 files changed, 32 insertions, 14 deletions
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb
index 8265810a0..11fa3363a 100644
--- a/app/lib/activitypub/activity.rb
+++ b/app/lib/activitypub/activity.rb
@@ -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
diff --git a/spec/lib/activitypub/activity/announce_spec.rb b/spec/lib/activitypub/activity/announce_spec.rb
index 94b9d348d..aa58d9e23 100644
--- a/spec/lib/activitypub/activity/announce_spec.rb
+++ b/spec/lib/activitypub/activity/announce_spec.rb
@@ -1,7 +1,7 @@
 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',