From 0f155829b7362d2bb81e2b80e96a351dc7dac538 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 31 May 2017 14:32:11 -0400 Subject: [PATCH] Improve spec coverage and clean up api/v1/follow_requests controller (#3465) --- .../api/v1/follow_requests_controller.rb | 64 +++++++++++++++---- .../api/v1/follow_requests_controller_spec.rb | 2 +- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index fbb2733d8..8a8d40d77 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -3,32 +3,72 @@ class Api::V1::FollowRequestsController < ApiController before_action -> { doorkeeper_authorize! :follow } before_action :require_user! + after_action :insert_pagination_headers, only: :index def index - @accounts = Account.includes(:follow_requests) - .references(:follow_requests) - .merge(FollowRequest.where(target_account: current_account) - .paginate_by_max_id(DEFAULT_ACCOUNTS_LIMIT, params[:max_id], params[:since_id])) - .to_a - - next_path = api_v1_follow_requests_url(pagination_params(max_id: @accounts.last.follow_requests.last.id)) if @accounts.size == DEFAULT_ACCOUNTS_LIMIT - prev_path = api_v1_follow_requests_url(pagination_params(since_id: @accounts.first.follow_requests.first.id)) unless @accounts.empty? - - set_pagination_headers(next_path, prev_path) + @accounts = load_accounts end def authorize - AuthorizeFollowService.new.call(Account.find(params[:id]), current_account) + AuthorizeFollowService.new.call(account, current_account) render_empty end def reject - RejectFollowService.new.call(Account.find(params[:id]), current_account) + RejectFollowService.new.call(account, current_account) render_empty end private + def account + Account.find(params[:id]) + end + + def load_accounts + default_accounts.merge(paginated_follow_requests).to_a + end + + def default_accounts + Account.includes(:follow_requests).references(:follow_requests) + end + + def paginated_follow_requests + FollowRequest.where(target_account: current_account).paginate_by_max_id( + limit_param(DEFAULT_ACCOUNTS_LIMIT), + params[:max_id], + params[:since_id] + ) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + if records_continue? + api_v1_follow_requests_url pagination_params(max_id: pagination_max_id) + end + end + + def prev_path + unless @accounts.empty? + api_v1_follow_requests_url pagination_params(since_id: pagination_since_id) + end + end + + def pagination_max_id + @accounts.last.follow_requests.last.id + end + + def pagination_since_id + @accounts.first.follow_requests.first.id + end + + def records_continue? + @accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT) + end + def pagination_params(core_params) params.permit(:limit).merge(core_params) end diff --git a/spec/controllers/api/v1/follow_requests_controller_spec.rb b/spec/controllers/api/v1/follow_requests_controller_spec.rb index a90d2d290..d455a0255 100644 --- a/spec/controllers/api/v1/follow_requests_controller_spec.rb +++ b/spec/controllers/api/v1/follow_requests_controller_spec.rb @@ -14,7 +14,7 @@ RSpec.describe Api::V1::FollowRequestsController, type: :controller do describe 'GET #index' do before do - get :index + get :index, params: { limit: 1 } end it 'returns http success' do