Move reblogged_by and favourited_by actions out of api/v1/statuses and into unique controllers (#3646)
* Add specs for api statuses routes * Update favourited_by and reblogged_by api routes * Move methods into new controllers * Use load_accounts methods to simplify index actions * Clean up load_accounts methods * Clean up link header generation * Check for link headers in specs * Remove unused actions from api/v1/statuses controller * Remove specs for moved actions
This commit is contained in:
		
					parent
					
						
							
								0464602978
							
						
					
				
			
			
				commit
				
					
						5282ba862a
					
				
			
		
					 8 changed files with 314 additions and 105 deletions
				
			
		| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Api::V1::Statuses::FavouritedByAccountsController, type: :controller do
 | 
			
		||||
  render_views
 | 
			
		||||
 | 
			
		||||
  let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) }
 | 
			
		||||
  let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') }
 | 
			
		||||
  let(:token) { double acceptable?: true, resource_owner_id: user.id, application: app }
 | 
			
		||||
 | 
			
		||||
  context 'with an oauth token' do
 | 
			
		||||
    before do
 | 
			
		||||
      allow(controller).to receive(:doorkeeper_token) { token }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'GET #index' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account) }
 | 
			
		||||
 | 
			
		||||
      before do
 | 
			
		||||
        Fabricate(:favourite, status: status)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns http success' do
 | 
			
		||||
        get :index, params: { status_id: status.id, limit: 1 }
 | 
			
		||||
        expect(response).to have_http_status(:success)
 | 
			
		||||
        expect(response.headers['Link'].links.size).to eq(2)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'without an oauth token' do
 | 
			
		||||
    before do
 | 
			
		||||
      allow(controller).to receive(:doorkeeper_token) { nil }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with a private status' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account, visibility: :private) }
 | 
			
		||||
 | 
			
		||||
      describe 'GET #index' do
 | 
			
		||||
        before do
 | 
			
		||||
          Fabricate(:favourite, status: status)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http unautharized' do
 | 
			
		||||
          get :index, params: { status_id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:missing)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with a public status' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account, visibility: :public) }
 | 
			
		||||
 | 
			
		||||
      describe 'GET #index' do
 | 
			
		||||
        before do
 | 
			
		||||
          Fabricate(:favourite, status: status)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http success' do
 | 
			
		||||
          get :index, params: { status_id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:success)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Api::V1::Statuses::RebloggedByAccountsController, type: :controller do
 | 
			
		||||
  render_views
 | 
			
		||||
 | 
			
		||||
  let(:user)  { Fabricate(:user, account: Fabricate(:account, username: 'alice')) }
 | 
			
		||||
  let(:app)   { Fabricate(:application, name: 'Test app', website: 'http://testapp.com') }
 | 
			
		||||
  let(:token) { double acceptable?: true, resource_owner_id: user.id, application: app }
 | 
			
		||||
 | 
			
		||||
  context 'with an oauth token' do
 | 
			
		||||
    before do
 | 
			
		||||
      allow(controller).to receive(:doorkeeper_token) { token }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'GET #index' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account) }
 | 
			
		||||
 | 
			
		||||
      before do
 | 
			
		||||
        Fabricate(:status, reblog_of_id: status.id)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns http success' do
 | 
			
		||||
        get :index, params: { status_id: status.id, limit: 1 }
 | 
			
		||||
        expect(response).to have_http_status(:success)
 | 
			
		||||
        expect(response.headers['Link'].links.size).to eq(2)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'without an oauth token' do
 | 
			
		||||
    before do
 | 
			
		||||
      allow(controller).to receive(:doorkeeper_token) { nil }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with a private status' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account, visibility: :private) }
 | 
			
		||||
 | 
			
		||||
      describe 'GET #index' do
 | 
			
		||||
        before do
 | 
			
		||||
          Fabricate(:status, reblog_of_id: status.id)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http unautharized' do
 | 
			
		||||
          get :index, params: { status_id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:missing)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with a public status' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account, visibility: :public) }
 | 
			
		||||
 | 
			
		||||
      describe 'GET #index' do
 | 
			
		||||
        before do
 | 
			
		||||
          Fabricate(:status, reblog_of_id: status.id)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http success' do
 | 
			
		||||
          get :index, params: { status_id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:success)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -34,32 +34,6 @@ RSpec.describe Api::V1::StatusesController, type: :controller do
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'GET #reblogged_by' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account) }
 | 
			
		||||
 | 
			
		||||
      before do
 | 
			
		||||
        post :reblog, params: { id: status.id }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns http success' do
 | 
			
		||||
        get :reblogged_by, params: { id: status.id }
 | 
			
		||||
        expect(response).to have_http_status(:success)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'GET #favourited_by' do
 | 
			
		||||
      let(:status) { Fabricate(:status, account: user.account) }
 | 
			
		||||
 | 
			
		||||
      before do
 | 
			
		||||
        post :favourite, params: { id: status.id }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns http success' do
 | 
			
		||||
        get :favourited_by, params: { id: status.id }
 | 
			
		||||
        expect(response).to have_http_status(:success)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'POST #create' do
 | 
			
		||||
      before do
 | 
			
		||||
        post :create, params: { status: 'Hello world' }
 | 
			
		||||
| 
						 | 
				
			
			@ -250,28 +224,6 @@ RSpec.describe Api::V1::StatusesController, type: :controller do
 | 
			
		|||
          expect(response).to have_http_status(:missing)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe 'GET #reblogged_by' do
 | 
			
		||||
        before do
 | 
			
		||||
          post :reblog, params: { id: status.id }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http unautharized' do
 | 
			
		||||
          get :reblogged_by, params: { id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:missing)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe 'GET #favourited_by' do
 | 
			
		||||
        before do
 | 
			
		||||
          post :favourite, params: { id: status.id }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http unautharized' do
 | 
			
		||||
          get :favourited_by, params: { id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:missing)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with a public status' do
 | 
			
		||||
| 
						 | 
				
			
			@ -301,28 +253,6 @@ RSpec.describe Api::V1::StatusesController, type: :controller do
 | 
			
		|||
          expect(response).to have_http_status(:success)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe 'GET #reblogged_by' do
 | 
			
		||||
        before do
 | 
			
		||||
          post :reblog, params: { id: status.id }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http success' do
 | 
			
		||||
          get :reblogged_by, params: { id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:success)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe 'GET #favourited_by' do
 | 
			
		||||
        before do
 | 
			
		||||
          post :favourite, params: { id: status.id }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        it 'returns http success' do
 | 
			
		||||
          get :favourited_by, params: { id: status.id }
 | 
			
		||||
          expect(response).to have_http_status(:success)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue