Adding follow requests API
This commit is contained in:
		
							
								
								
									
										29
									
								
								app/controllers/api/v1/follow_requests_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								app/controllers/api/v1/follow_requests_controller.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| # frozen_string_literal: true | ||||
|  | ||||
| class Api::V1::FollowRequestsController < ApiController | ||||
|   before_action -> { doorkeeper_authorize! :follow } | ||||
|   before_action :require_user! | ||||
|  | ||||
|   def index | ||||
|     results   = FollowRequest.where(target_account: current_account).paginate_by_max_id(DEFAULT_ACCOUNTS_LIMIT, params[:max_id], params[:since_id]) | ||||
|     accounts  = Account.where(id: results.map(&:account_id)).map { |a| [a.id, a] }.to_h | ||||
|     @accounts = results.map { |f| accounts[f.account_id] } | ||||
|  | ||||
|     set_account_counters_maps(@accounts) | ||||
|  | ||||
|     next_path = api_v1_follow_requests_url(max_id: results.last.id)    if results.size == DEFAULT_ACCOUNTS_LIMIT | ||||
|     prev_path = api_v1_follow_requests_url(since_id: results.first.id) unless results.empty? | ||||
|  | ||||
|     set_pagination_headers(next_path, prev_path) | ||||
|   end | ||||
|  | ||||
|   def authorize | ||||
|     FollowRequest.find_by!(account_id: params[:id], target_account: current_account).authorize! | ||||
|     render_empty | ||||
|   end | ||||
|  | ||||
|   def reject | ||||
|     FollowRequest.find_by!(account_id: params[:id], target_account: current_account).reject! | ||||
|     render_empty | ||||
|   end | ||||
| end | ||||
							
								
								
									
										2
									
								
								app/helpers/api/v1/follow_requests_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								app/helpers/api/v1/follow_requests_helper.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| module Api::V1::FollowRequestsHelper | ||||
| end | ||||
| @@ -1,6 +1,8 @@ | ||||
| # frozen_string_literal: true | ||||
|  | ||||
| class FollowRequest < ApplicationRecord | ||||
|   include Paginable | ||||
|  | ||||
|   belongs_to :account | ||||
|   belongs_to :target_account, class_name: 'Account' | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								app/views/api/v1/follow_requests/index.rabl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								app/views/api/v1/follow_requests/index.rabl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| collection @accounts | ||||
| extends 'api/v1/accounts/show' | ||||
| @@ -104,6 +104,13 @@ Rails.application.routes.draw do | ||||
|       resources :media,    only: [:create] | ||||
|       resources :apps,     only: [:create] | ||||
|  | ||||
|       resources :follow_requests, only: [:index] do | ||||
|         member do | ||||
|           post :authorize | ||||
|           post :reject | ||||
|         end | ||||
|       end | ||||
|  | ||||
|       resources :notifications, only: [:index] | ||||
|  | ||||
|       resources :accounts, only: [:show] do | ||||
|   | ||||
							
								
								
									
										52
									
								
								spec/controllers/api/v1/follow_requests_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								spec/controllers/api/v1/follow_requests_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| RSpec.describe Api::V1::FollowRequestsController, type: :controller do | ||||
|   render_views | ||||
|  | ||||
|   let(:user)     { Fabricate(:user, account: Fabricate(:account, username: 'alice', locked: true)) } | ||||
|   let(:token)    { double acceptable?: true, resource_owner_id: user.id } | ||||
|   let(:follower) { Fabricate(:account, username: 'bob') } | ||||
|  | ||||
|   before do | ||||
|     FollowService.new.call(follower, user.account.acct) | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
|  | ||||
|   describe 'GET #index' do | ||||
|     before do | ||||
|       get :index | ||||
|     end | ||||
|  | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'POST #authorize' do | ||||
|     before do | ||||
|       post :authorize, params: { id: follower.id } | ||||
|     end | ||||
|  | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|  | ||||
|     it 'allows follower to follow' do | ||||
|       expect(follower.following?(user.account)).to be true | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   describe 'POST #reject' do | ||||
|     before do | ||||
|       post :reject, params: { id: follower.id } | ||||
|     end | ||||
|  | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(:success) | ||||
|     end | ||||
|  | ||||
|     it 'removes follow request' do | ||||
|       expect(FollowRequest.where(target_account: user.account, account: follower).count).to eq 0 | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -1,15 +1,5 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| # Specs in this file have access to a helper object that includes | ||||
| # the Api::OembedHelper. For example: | ||||
| # | ||||
| # describe Api::OembedHelper do | ||||
| #   describe "string concat" do | ||||
| #     it "concats two strings with spaces" do | ||||
| #       expect(helper.concat_strings("this","that")).to eq("this that") | ||||
| #     end | ||||
| #   end | ||||
| # end | ||||
| RSpec.describe Api::OembedHelper, type: :helper do | ||||
|   pending "add some examples to (or delete) #{__FILE__}" | ||||
|  | ||||
| end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user