logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: 0f92119cebbebc463960c5532a049277ec1706be
parent: b7d47c2aef23ec6219b6fb0038bc64629b285701
Author: Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
Date:   Fri, 28 Jul 2017 11:37:44 +0900

Cover Api::V1:FavouritesController more (#4409)


Diffstat:

Mspec/controllers/api/v1/favourites_controller_spec.rb74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file 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 @@ -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