diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/lib/tag_manager_spec.rb | 32 | ||||
-rw-r--r-- | spec/models/favourite_spec.rb | 36 | ||||
-rw-r--r-- | spec/models/follow_spec.rb | 30 | ||||
-rw-r--r-- | spec/models/stream_entry_spec.rb | 14 | ||||
-rw-r--r-- | spec/services/authorize_follow_service_spec.rb | 49 | ||||
-rw-r--r-- | spec/services/block_service_spec.rb | 34 | ||||
-rw-r--r-- | spec/services/favourite_service_spec.rb | 36 | ||||
-rw-r--r-- | spec/services/follow_service_spec.rb | 72 | ||||
-rw-r--r-- | spec/services/process_interaction_service_spec.rb | 96 | ||||
-rw-r--r-- | spec/services/reject_follow_service_spec.rb | 49 | ||||
-rw-r--r-- | spec/services/unblock_service_spec.rb | 36 | ||||
-rw-r--r-- | spec/services/unfollow_service_spec.rb | 37 |
12 files changed, 395 insertions, 126 deletions
diff --git a/spec/lib/tag_manager_spec.rb b/spec/lib/tag_manager_spec.rb index b60584253..cbb427a8c 100644 --- a/spec/lib/tag_manager_spec.rb +++ b/spec/lib/tag_manager_spec.rb @@ -47,22 +47,6 @@ RSpec.describe TagManager do expect(subject).to be_a String end end - - context 'Follow' do - let(:target) { Fabricate(:follow, account: alice, target_account: bob) } - - it 'returns a string' do - expect(subject).to be_a String - end - end - - context 'Favourite' do - let(:target) { Fabricate(:favourite, account: bob, status: status) } - - it 'returns a string' do - expect(subject).to be_a String - end - end end describe '#url_for' do @@ -87,21 +71,5 @@ RSpec.describe TagManager do expect(subject).to be_a String end end - - context 'Follow' do - let(:target) { Fabricate(:follow, account: alice, target_account: bob) } - - it 'returns a URL' do - expect(subject).to be_a String - end - end - - context 'Favourite' do - let(:target) { Fabricate(:favourite, account: bob, status: status) } - - it 'returns a URL' do - expect(subject).to be_a String - end - end end end diff --git a/spec/models/favourite_spec.rb b/spec/models/favourite_spec.rb index cc3d604d6..5b7126506 100644 --- a/spec/models/favourite_spec.rb +++ b/spec/models/favourite_spec.rb @@ -6,40 +6,4 @@ RSpec.describe Favourite, type: :model do let(:status) { Fabricate(:status, account: bob) } subject { Favourite.new(account: alice, status: status) } - - describe '#verb' do - it 'is always favorite' do - expect(subject.verb).to be :favorite - end - end - - describe '#title' do - it 'describes the favourite' do - expect(subject.title).to eql 'alice favourited a status by bob' - end - end - - describe '#content' do - it 'equals the title' do - expect(subject.content).to eq subject.title - end - end - - describe '#object_type' do - it 'is an activity' do - expect(subject.object_type).to be :activity - end - end - - describe '#target' do - it 'is the status that was favourited' do - expect(subject.target).to eq status - end - end - - describe '#thread' do - it 'equals the target' do - expect(subject.thread).to eq subject.target - end - end end diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index bc887b60d..eb21f3e18 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -5,34 +5,4 @@ RSpec.describe Follow, type: :model do let(:bob) { Fabricate(:account, username: 'bob') } subject { Follow.new(account: alice, target_account: bob) } - - describe '#verb' do - it 'is follow' do - expect(subject.verb).to be :follow - end - end - - describe '#title' do - it 'describes the follow' do - expect(subject.title).to eql 'alice started following bob' - end - end - - describe '#content' do - it 'is the same as the title' do - expect(subject.content).to eql subject.title - end - end - - describe '#object_type' do - it 'is an activity' do - expect(subject.object_type).to be :activity - end - end - - describe '#target' do - it 'is the person being followed' do - expect(subject.target).to eq bob - end - end end diff --git a/spec/models/stream_entry_spec.rb b/spec/models/stream_entry_spec.rb index 9ecf6412a..45bf26899 100644 --- a/spec/models/stream_entry_spec.rb +++ b/spec/models/stream_entry_spec.rb @@ -3,21 +3,11 @@ require 'rails_helper' RSpec.describe StreamEntry, type: :model do let(:alice) { Fabricate(:account, username: 'alice') } let(:bob) { Fabricate(:account, username: 'bob') } - let(:follow) { Fabricate(:follow, account: alice, target_account: bob) } let(:status) { Fabricate(:status, account: alice) } let(:reblog) { Fabricate(:status, account: bob, reblog: status) } let(:reply) { Fabricate(:status, account: bob, thread: status) } - let(:favourite) { Fabricate(:favourite, account: alice, status: status) } describe '#targeted?' do - it 'returns true for a follow' do - expect(follow.stream_entry.targeted?).to be true - end - - it 'returns true for a favourite' do - expect(favourite.stream_entry.targeted?).to be true - end - it 'returns true for a reblog' do expect(reblog.stream_entry.targeted?).to be true end @@ -28,10 +18,6 @@ RSpec.describe StreamEntry, type: :model do end describe '#threaded?' do - it 'returns true for a favourite' do - expect(favourite.stream_entry.threaded?).to be true - end - it 'returns true for a reply' do expect(reply.stream_entry.threaded?).to be true end diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb new file mode 100644 index 000000000..3f3a2bc56 --- /dev/null +++ b/spec/services/authorize_follow_service_spec.rb @@ -0,0 +1,49 @@ +require 'rails_helper' + +RSpec.describe AuthorizeFollowService do + let(:sender) { Fabricate(:account, username: 'alice') } + + subject { AuthorizeFollowService.new } + + describe 'local' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + FollowRequest.create(account: bob, target_account: sender) + subject.call(bob, sender) + end + + it 'removes follow request' do + expect(bob.requested?(sender)).to be false + end + + it 'creates follow relation' do + expect(bob.following?(sender)).to be true + end + end + + describe 'remote' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + FollowRequest.create(account: bob, target_account: sender) + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(bob, sender) + end + + it 'removes follow request' do + expect(bob.requested?(sender)).to be false + end + + it 'creates follow relation' do + expect(bob.following?(sender)).to be true + end + + it 'sends a follow request authorization salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:authorize]) + }).to have_been_made.once + end + end +end diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb index f6f07fa20..2a54e032e 100644 --- a/spec/services/block_service_spec.rb +++ b/spec/services/block_service_spec.rb @@ -1,5 +1,39 @@ require 'rails_helper' RSpec.describe BlockService do + let(:sender) { Fabricate(:account, username: 'alice') } + subject { BlockService.new } + + describe 'local' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + subject.call(sender, bob) + end + + it 'creates a blocking relation' do + expect(sender.blocking?(bob)).to be true + end + end + + describe 'remote' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(sender, bob) + end + + it 'creates a blocking relation' do + expect(sender.blocking?(bob)).to be true + end + + it 'sends a block salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:block]) + }).to have_been_made.once + end + end end diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb index eb961c28e..36f1b64d4 100644 --- a/spec/services/favourite_service_spec.rb +++ b/spec/services/favourite_service_spec.rb @@ -1,5 +1,41 @@ require 'rails_helper' RSpec.describe FavouriteService do + let(:sender) { Fabricate(:account, username: 'alice') } + subject { FavouriteService.new } + + describe 'local' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + let(:status) { Fabricate(:status, account: bob) } + + before do + subject.call(sender, status) + end + + it 'creates a favourite' do + expect(status.favourites.first).to_not be_nil + end + end + + describe 'remote' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + let(:status) { Fabricate(:status, account: bob, uri: 'tag:example.com:blahblah') } + + before do + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(sender, status) + end + + it 'creates a favourite' do + expect(status.favourites.first).to_not be_nil + end + + it 'sends a salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:favorite]) + }).to have_been_made.once + end + end end diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb index 304e0cf71..2ce0fa464 100644 --- a/spec/services/follow_service_spec.rb +++ b/spec/services/follow_service_spec.rb @@ -1,9 +1,75 @@ require 'rails_helper' RSpec.describe FollowService do + let(:sender) { Fabricate(:account, username: 'alice') } + subject { FollowService.new } - it 'creates a following relation' - it 'creates local account for remote user' - it 'sends follow to the remote user' + context 'local account' do + describe 'locked account' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, locked: true, username: 'bob')).account } + + before do + subject.call(sender, bob.acct) + end + + it 'creates a follow request' do + expect(FollowRequest.find_by(account: sender, target_account: bob)).to_not be_nil + end + end + + describe 'unlocked account' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + subject.call(sender, bob.acct) + end + + it 'creates a following relation' do + expect(sender.following?(bob)).to be true + end + end + end + + context 'remote account' do + describe 'locked account' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, locked: true, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(sender, bob.acct) + end + + it 'creates a follow request' do + expect(FollowRequest.find_by(account: sender, target_account: bob)).to_not be_nil + end + + it 'sends a follow request salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:request_friend]) + }).to have_been_made.once + end + end + + describe 'unlocked account' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(sender, bob.acct) + end + + it 'creates a following relation' do + expect(sender.following?(bob)).to be true + end + + it 'sends a follow salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:follow]) + }).to have_been_made.once + end + end + end end diff --git a/spec/services/process_interaction_service_spec.rb b/spec/services/process_interaction_service_spec.rb index 931815dc2..0845e09ed 100644 --- a/spec/services/process_interaction_service_spec.rb +++ b/spec/services/process_interaction_service_spec.rb @@ -1,15 +1,93 @@ require 'rails_helper' RSpec.describe ProcessInteractionService do + let(:receiver) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } + let(:sender) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + subject { ProcessInteractionService.new } - it 'creates account for new remote user' - it 'updates account for existing remote user' - it 'ignores envelopes that do not address the local user' - it 'accepts a status that mentions the local user' - it 'accepts a status that is a reply to the local user\'s' - it 'accepts a favourite to a status by the local user' - it 'accepts a reblog of a status of the local user' - it 'accepts a follow of the local user' - it 'accepts an unfollow of the local user' + describe 'follow request slap' do + before do + receiver.update(locked: true) + + payload = <<XML +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> + <author> + <name>bob</name> + <uri>https://cb6e6126.ngrok.io/users/bob</uri> + </author> + + <id>someIdHere</id> + <activity:verb>http://activitystrea.ms/schema/1.0/request-friend</activity:verb> +</entry> +XML + + envelope = OStatus2::Salmon.new.pack(payload, sender.keypair) + subject.call(envelope, receiver) + end + + it 'creates a record' do + expect(FollowRequest.find_by(account: sender, target_account: receiver)).to_not be_nil + end + end + + describe 'follow request authorization slap' do + before do + receiver.update(locked: true) + FollowRequest.create(account: sender, target_account: receiver) + + payload = <<XML +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> + <author> + <name>alice</name> + <uri>https://cb6e6126.ngrok.io/users/alice</uri> + </author> + + <id>someIdHere</id> + <activity:verb>http://activitystrea.ms/schema/1.0/authorize</activity:verb> +</entry> +XML + + envelope = OStatus2::Salmon.new.pack(payload, receiver.keypair) + subject.call(envelope, sender) + end + + it 'creates a follow relationship' do + expect(Follow.find_by(account: sender, target_account: receiver)).to_not be_nil + end + + it 'removes the follow request' do + expect(FollowRequest.find_by(account: sender, target_account: receiver)).to be_nil + end + end + + describe 'follow request rejection slap' do + before do + receiver.update(locked: true) + FollowRequest.create(account: sender, target_account: receiver) + + payload = <<XML +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> + <author> + <name>alice</name> + <uri>https://cb6e6126.ngrok.io/users/alice</uri> + </author> + + <id>someIdHere</id> + <activity:verb>http://activitystrea.ms/schema/1.0/reject</activity:verb> +</entry> +XML + + envelope = OStatus2::Salmon.new.pack(payload, receiver.keypair) + subject.call(envelope, sender) + end + + it 'does not create a follow relationship' do + expect(Follow.find_by(account: sender, target_account: receiver)).to be_nil + end + + it 'removes the follow request' do + expect(FollowRequest.find_by(account: sender, target_account: receiver)).to be_nil + end + end end diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb new file mode 100644 index 000000000..50749b633 --- /dev/null +++ b/spec/services/reject_follow_service_spec.rb @@ -0,0 +1,49 @@ +require 'rails_helper' + +RSpec.describe RejectFollowService do + let(:sender) { Fabricate(:account, username: 'alice') } + + subject { RejectFollowService.new } + + describe 'local' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + FollowRequest.create(account: bob, target_account: sender) + subject.call(bob, sender) + end + + it 'removes follow request' do + expect(bob.requested?(sender)).to be false + end + + it 'does not create follow relation' do + expect(bob.following?(sender)).to be false + end + end + + describe 'remote' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + FollowRequest.create(account: bob, target_account: sender) + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(bob, sender) + end + + it 'removes follow request' do + expect(bob.requested?(sender)).to be false + end + + it 'does not create follow relation' do + expect(bob.following?(sender)).to be false + end + + it 'sends a follow request rejection salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:reject]) + }).to have_been_made.once + end + end +end diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb index 126f70ff1..1b9ae1239 100644 --- a/spec/services/unblock_service_spec.rb +++ b/spec/services/unblock_service_spec.rb @@ -1,5 +1,41 @@ require 'rails_helper' RSpec.describe UnblockService do + let(:sender) { Fabricate(:account, username: 'alice') } + subject { UnblockService.new } + + describe 'local' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + sender.block!(bob) + subject.call(sender, bob) + end + + it 'destroys the blocking relation' do + expect(sender.blocking?(bob)).to be false + end + end + + describe 'remote' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + sender.block!(bob) + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(sender, bob) + end + + it 'destroys the blocking relation' do + expect(sender.following?(bob)).to be false + end + + it 'sends an unblock salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:unblock]) + }).to have_been_made.once + end + end end diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb index 6541415d0..8ec2148a1 100644 --- a/spec/services/unfollow_service_spec.rb +++ b/spec/services/unfollow_service_spec.rb @@ -1,8 +1,41 @@ require 'rails_helper' RSpec.describe UnfollowService do + let(:sender) { Fabricate(:account, username: 'alice') } + subject { UnfollowService.new } - it 'destroys the following relation' - it 'sends remote interaction for remote user' + describe 'local' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + sender.follow!(bob) + subject.call(sender, bob) + end + + it 'destroys the following relation' do + expect(sender.following?(bob)).to be false + end + end + + describe 'remote' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } + + before do + sender.follow!(bob) + stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) + subject.call(sender, bob) + end + + it 'destroys the following relation' do + expect(sender.following?(bob)).to be false + end + + it 'sends an unfollow salmon slap' do + expect(a_request(:post, "http://salmon.example.com/").with { |req| + xml = OStatus2::Salmon.new.unpack(req.body) + xml.match(TagManager::VERBS[:unfollow]) + }).to have_been_made.once + end + end end |