about summary refs log tree commit diff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb29
-rw-r--r--spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb29
-rw-r--r--spec/fabricators/assets/TEAPOT6
-rw-r--r--spec/fabricators/assets/utah_teapot.pngbin0 -> 248232 bytes
-rw-r--r--spec/fabricators/site_upload_fabricator.rb1
-rw-r--r--spec/services/account_search_service_spec.rb17
-rw-r--r--spec/services/search_service_spec.rb30
7 files changed, 94 insertions, 18 deletions
diff --git a/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb b/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb
index 75e0570e9..42a18cdc3 100644
--- a/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts/follower_accounts_controller_spec.rb
@@ -7,15 +7,40 @@ describe Api::V1::Accounts::FollowerAccountsController do
   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') }
 
   before do
-    Fabricate(:follow, target_account: user.account)
     allow(controller).to receive(:doorkeeper_token) { token }
   end
 
   describe 'GET #index' do
+    let(:simon) { Fabricate(:account, username: 'simon') }
+    let(:lewis) { Fabricate(:account, username: 'lewis') }
+
+    before do
+      simon.follow!(lewis)
+    end
+
     it 'returns http success' do
-      get :index, params: { account_id: user.account.id, limit: 1 }
+      get :index, params: { account_id: lewis.id, limit: 1 }
 
       expect(response).to have_http_status(200)
     end
+
+    it 'returns JSON with correct data' do
+      get :index, params: { account_id: lewis.id, limit: 1 }
+
+      json = body_as_json
+
+      expect(json).to be_a Enumerable
+      expect(json.first[:username]).to eq 'simon'
+    end
+
+    it 'does not return accounts blocking you' do
+      simon.block!(user.account)
+      get :index, params: { account_id: lewis.id, limit: 1 }
+
+      json = body_as_json
+
+      expect(json).to be_a Enumerable
+      expect(json.size).to eq 0
+    end
   end
 end
diff --git a/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb b/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb
index 7f7105ad3..911b381fe 100644
--- a/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts/following_accounts_controller_spec.rb
@@ -7,15 +7,40 @@ describe Api::V1::Accounts::FollowingAccountsController do
   let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:accounts') }
 
   before do
-    Fabricate(:follow, account: user.account)
     allow(controller).to receive(:doorkeeper_token) { token }
   end
 
   describe 'GET #index' do
+    let(:simon) { Fabricate(:account, username: 'simon') }
+    let(:lewis) { Fabricate(:account, username: 'lewis') }
+
+    before do
+      lewis.follow!(simon)
+    end
+
     it 'returns http success' do
-      get :index, params: { account_id: user.account.id, limit: 1 }
+      get :index, params: { account_id: lewis.id, limit: 1 }
 
       expect(response).to have_http_status(200)
     end
+
+    it 'returns JSON with correct data' do
+      get :index, params: { account_id: lewis.id, limit: 1 }
+
+      json = body_as_json
+
+      expect(json).to be_a Enumerable
+      expect(json.first[:username]).to eq 'simon'
+    end
+
+    it 'does not return accounts blocking you' do
+      simon.block!(user.account)
+      get :index, params: { account_id: lewis.id, limit: 1 }
+
+      json = body_as_json
+
+      expect(json).to be_a Enumerable
+      expect(json.size).to eq 0
+    end
   end
 end
diff --git a/spec/fabricators/assets/TEAPOT b/spec/fabricators/assets/TEAPOT
new file mode 100644
index 000000000..e624ecb4c
--- /dev/null
+++ b/spec/fabricators/assets/TEAPOT
@@ -0,0 +1,6 @@
+This "Utah teapot" photograph is licensed under the Creative Commons
+Attribution-Share Alike 3.0 Unported license:
+  https://creativecommons.org/licenses/by-sa/3.0/deed.en
+
+Original source of work:
+  https://commons.wikimedia.org/wiki/File:Utah_teapot_simple_2.png
diff --git a/spec/fabricators/assets/utah_teapot.png b/spec/fabricators/assets/utah_teapot.png
new file mode 100644
index 000000000..6708361e5
--- /dev/null
+++ b/spec/fabricators/assets/utah_teapot.png
Binary files differdiff --git a/spec/fabricators/site_upload_fabricator.rb b/spec/fabricators/site_upload_fabricator.rb
index 4a171486f..2efc57e28 100644
--- a/spec/fabricators/site_upload_fabricator.rb
+++ b/spec/fabricators/site_upload_fabricator.rb
@@ -1,2 +1,3 @@
 Fabricator(:site_upload) do
+  file { File.open(File.join(Rails.root, 'spec', 'fabricators', 'assets', 'utah_teapot.png')) }
 end
diff --git a/spec/services/account_search_service_spec.rb b/spec/services/account_search_service_spec.rb
index 7b071b378..40ef4b84a 100644
--- a/spec/services/account_search_service_spec.rb
+++ b/spec/services/account_search_service_spec.rb
@@ -156,5 +156,22 @@ describe AccountSearchService, type: :service do
         expect(results).to eq []
       end
     end
+
+    describe 'should not include accounts blocking the requester' do
+      let!(:blocked) { Fabricate(:account) }
+      let!(:blocker) { Fabricate(:account, username: 'exact') }
+
+      before do
+        blocker.block!(blocked)
+      end
+
+      it 'returns the fuzzy match first, and does not return suspended exacts' do
+        partial = Fabricate(:account, username: 'exactness')
+
+        results = subject.call('exact', blocked, limit: 10)
+        expect(results.size).to eq 1
+        expect(results).to eq [partial]
+      end
+    end
   end
 end
diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb
index d064cd9b8..900533e71 100644
--- a/spec/services/search_service_spec.rb
+++ b/spec/services/search_service_spec.rb
@@ -3,6 +3,8 @@
 require 'rails_helper'
 
 describe SearchService, type: :service do
+  let(:current_account) { Fabricate(:user).account }
+
   subject { described_class.new }
 
   describe '#call' do
@@ -10,7 +12,7 @@ describe SearchService, type: :service do
       it 'returns empty results without searching' do
         allow(AccountSearchService).to receive(:new)
         allow(Tag).to receive(:search_for)
-        results = subject.call('', nil, 10)
+        results = subject.call('', current_account, 10)
 
         expect(results).to eq(empty_results)
         expect(AccountSearchService).not_to have_received(:new)
@@ -27,33 +29,33 @@ describe SearchService, type: :service do
         it 'returns the empty results' do
           service = double(call: nil)
           allow(ResolveURLService).to receive(:new).and_return(service)
-          results = subject.call(@query, nil, 10)
+          results = subject.call(@query, current_account, 10)
 
-          expect(service).to have_received(:call).with(@query, on_behalf_of: nil)
+          expect(service).to have_received(:call).with(@query, on_behalf_of: current_account)
           expect(results).to eq empty_results
         end
       end
 
       context 'that finds an account' do
         it 'includes the account in the results' do
-          account = Account.new
+          account = Fabricate(:account)
           service = double(call: account)
           allow(ResolveURLService).to receive(:new).and_return(service)
 
-          results = subject.call(@query, nil, 10)
-          expect(service).to have_received(:call).with(@query, on_behalf_of: nil)
+          results = subject.call(@query, current_account, 10)
+          expect(service).to have_received(:call).with(@query, on_behalf_of: current_account)
           expect(results).to eq empty_results.merge(accounts: [account])
         end
       end
 
       context 'that finds a status' do
         it 'includes the status in the results' do
-          status = Status.new
+          status = Fabricate(:status)
           service = double(call: status)
           allow(ResolveURLService).to receive(:new).and_return(service)
 
-          results = subject.call(@query, nil, 10)
-          expect(service).to have_received(:call).with(@query, on_behalf_of: nil)
+          results = subject.call(@query, current_account, 10)
+          expect(service).to have_received(:call).with(@query, on_behalf_of: current_account)
           expect(results).to eq empty_results.merge(statuses: [status])
         end
       end
@@ -63,12 +65,12 @@ describe SearchService, type: :service do
       context 'that matches an account' do
         it 'includes the account in the results' do
           query = 'username'
-          account = Account.new
+          account = Fabricate(:account)
           service = double(call: [account])
           allow(AccountSearchService).to receive(:new).and_return(service)
 
-          results = subject.call(query, nil, 10)
-          expect(service).to have_received(:call).with(query, nil, limit: 10, offset: 0, resolve: false)
+          results = subject.call(query, current_account, 10)
+          expect(service).to have_received(:call).with(query, current_account, limit: 10, offset: 0, resolve: false)
           expect(results).to eq empty_results.merge(accounts: [account])
         end
       end
@@ -79,7 +81,7 @@ describe SearchService, type: :service do
           tag = Tag.new
           allow(Tag).to receive(:search_for).with('tag', 10, 0).and_return([tag])
 
-          results = subject.call(query, nil, 10)
+          results = subject.call(query, current_account, 10)
           expect(Tag).to have_received(:search_for).with('tag', 10, 0)
           expect(results).to eq empty_results.merge(hashtags: [tag])
         end
@@ -87,7 +89,7 @@ describe SearchService, type: :service do
           query = '@username'
           allow(Tag).to receive(:search_for)
 
-          results = subject.call(query, nil, 10)
+          results = subject.call(query, current_account, 10)
           expect(Tag).not_to have_received(:search_for)
           expect(results).to eq empty_results
         end