summaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorAkihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>2018-01-04 02:08:57 +0900
committerEugen Rochko <eugen@zeonfederated.com>2018-01-03 18:08:57 +0100
commit161c72d66d25bb8f5ff492e36a8521c701ab8afc (patch)
treed57b674958a4353bba0cf91ba4197748a66fc2f5 /spec
parent53d99ebf4f54c25fa58709e9dc05730479ea7d02 (diff)
Allow to dereference Follow object for ActivityPub (#5772)
* Allow to dereference Follow object for ActivityPub * Accept IRI as object representation for Accept activity
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/activitypub/follows_controller_spec.rb43
-rw-r--r--spec/lib/activitypub/activity/accept_spec.rb53
-rw-r--r--spec/models/follow_request_spec.rb8
3 files changed, 84 insertions, 20 deletions
diff --git a/spec/controllers/activitypub/follows_controller_spec.rb b/spec/controllers/activitypub/follows_controller_spec.rb
new file mode 100644
index 00000000000..6026cd353fc
--- /dev/null
+++ b/spec/controllers/activitypub/follows_controller_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe ActivityPub::FollowsController, type: :controller do
+ let(:follow_request) { Fabricate(:follow_request, account: account) }
+
+ render_views
+
+ context 'with local account' do
+ let(:account) { Fabricate(:account, domain: nil) }
+
+ it 'returns follow request' do
+ signed_request = Request.new(:get, account_follow_url(account, follow_request))
+ signed_request.on_behalf_of(follow_request.target_account)
+ request.headers.merge! signed_request.headers
+
+ get :show, params: { id: follow_request, account_username: account.username }
+
+ expect(body_as_json[:id]).to eq ActivityPub::TagManager.instance.uri_for(follow_request)
+ expect(response).to have_http_status :success
+ end
+
+ it 'returns http 404 without signature' do
+ get :show, params: { id: follow_request, account_username: account.username }
+ expect(response).to have_http_status 404
+ end
+ end
+
+ context 'with remote account' do
+ let(:account) { Fabricate(:account, domain: Faker::Internet.domain_name) }
+
+ it 'returns http 404' do
+ signed_request = Request.new(:get, account_follow_url(account, follow_request))
+ signed_request.on_behalf_of(follow_request.target_account)
+ request.headers.merge! signed_request.headers
+
+ get :show, params: { id: follow_request, account_username: account.username }
+
+ expect(response).to have_http_status 404
+ end
+ end
+end
diff --git a/spec/lib/activitypub/activity/accept_spec.rb b/spec/lib/activitypub/activity/accept_spec.rb
index 6503c83e37a..9f43be35ddf 100644
--- a/spec/lib/activitypub/activity/accept_spec.rb
+++ b/spec/lib/activitypub/activity/accept_spec.rb
@@ -3,36 +3,49 @@ require 'rails_helper'
RSpec.describe ActivityPub::Activity::Accept do
let(:sender) { 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
+ let!(:follow_request) { Fabricate(:follow_request, account: recipient, target_account: sender) }
describe '#perform' do
subject { described_class.new(json, sender) }
before do
- Fabricate(:follow_request, account: recipient, target_account: sender)
subject.perform
end
- it 'creates a follow relationship' do
- expect(recipient.following?(sender)).to be true
+ context 'with concerete object representation' do
+ let(:json) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: 'foo',
+ type: 'Accept',
+ actor: ActivityPub::TagManager.instance.uri_for(sender),
+ object: {
+ type: 'Follow',
+ actor: ActivityPub::TagManager.instance.uri_for(recipient),
+ object: ActivityPub::TagManager.instance.uri_for(sender),
+ },
+ }.with_indifferent_access
+ end
+
+ it 'creates a follow relationship' do
+ expect(recipient.following?(sender)).to be true
+ end
end
- it 'removes the follow request' do
- expect(recipient.requested?(sender)).to be false
+ context 'with object represented by id' do
+ let(:json) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: 'foo',
+ type: 'Accept',
+ actor: ActivityPub::TagManager.instance.uri_for(sender),
+ object: ActivityPub::TagManager.instance.uri_for(follow_request),
+ }.with_indifferent_access
+ end
+
+ it 'creates a follow relationship' do
+ expect(recipient.following?(sender)).to be true
+ end
end
end
end
diff --git a/spec/models/follow_request_spec.rb b/spec/models/follow_request_spec.rb
index 59893a14fa7..7e10631a3e4 100644
--- a/spec/models/follow_request_spec.rb
+++ b/spec/models/follow_request_spec.rb
@@ -27,4 +27,12 @@ RSpec.describe FollowRequest, type: :model do
expect(follow_request.account.muting_reblogs?(target)).to be true
end
end
+
+ describe '#object_type' do
+ let(:follow_request) { Fabricate(:follow_request) }
+
+ it 'equals to :follow' do
+ expect(follow_request.object_type).to eq :follow
+ end
+ end
end