diff options
author | Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp> | 2017-07-28 11:37:44 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-07-28 04:37:44 +0200 |
commit | 0f92119cebbebc463960c5532a049277ec1706be (patch) | |
tree | 6c10e474c9fd153bbe1bae0b50492a885092f721 /spec | |
parent | b7d47c2aef23ec6219b6fb0038bc64629b285701 (diff) |
Cover Api::V1:FavouritesController more (#4409)
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/api/v1/favourites_controller_spec.rb | 74 |
1 files changed, 66 insertions, 8 deletions
diff --git a/spec/controllers/api/v1/favourites_controller_spec.rb b/spec/controllers/api/v1/favourites_controller_spec.rb index 85da87ad9..3de045377 100644 --- a/spec/controllers/api/v1/favourites_controller_spec.rb +++ b/spec/controllers/api/v1/favourites_controller_spec.rb @@ -6,16 +6,74 @@ RSpec.describe Api::V1::FavouritesController, type: :controller do let(:user) { Fabricate(:user) } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } - before do - Fabricate(:favourite, account: user.account) - allow(controller).to receive(:doorkeeper_token) { token } - end - describe 'GET #index' do - it 'returns http success' do - get :index, params: { limit: 1 } + context 'without token' do + it 'returns http unauthorized' do + get :index + expect(response).to have_http_status :unauthorized + end + end + + context 'with token' do + context 'without read scope' do + before do + allow(controller).to receive(:doorkeeper_token) do + Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: '') + end + end + + it 'returns http forbidden' do + get :index + expect(response).to have_http_status :forbidden + end + end + + context 'without valid resource owner' do + before do + token = Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') + user.destroy! + + allow(controller).to receive(:doorkeeper_token) { token } + end + + it 'returns http unprocessable entity' do + get :index + expect(response).to have_http_status :unprocessable_entity + end + end + + context 'with read scope and valid resource owner' do + before do + allow(controller).to receive(:doorkeeper_token) do + Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') + end + end + + it 'shows favourites owned by the user' do + favourite_by_user = Fabricate(:favourite, account: user.account) + favourite_by_others = Fabricate(:favourite) + + get :index + + expect(assigns(:statuses)).to match_array [favourite_by_user.status] + end + + it 'adds pagination headers if necessary' do + favourite = Fabricate(:favourite, account: user.account) + + get :index, params: { limit: 1 } + + expect(response.headers['Link'].find_link(['rel', 'next']).href).to eq "http://test.host/api/v1/favourites?limit=1&max_id=#{favourite.id}" + expect(response.headers['Link'].find_link(['rel', 'prev']).href).to eq "http://test.host/api/v1/favourites?limit=1&since_id=#{favourite.id}" + end + + it 'does not add pagination headers if not necessary' do + get :index - expect(response).to have_http_status(:success) + expect(response.headers['Link'].find_link(['rel', 'next'])).to eq nil + expect(response.headers['Link'].find_link(['rel', 'prev'])).to eq nil + end + end end end end |