From 33c56212b9881f15289c6d8b1908d383ccf985a9 Mon Sep 17 00:00:00 2001 From: Surinna Curtis Date: Tue, 26 Sep 2017 02:02:42 +0000 Subject: [PATCH] Rename /api/v1/mutes/details -> /api/v2/mutes --- app/controllers/api/v1/mutes_controller.rb | 33 ++++-------- app/controllers/api/v2/mutes_controller.rb | 54 +++++++++++++++++++ config/routes.rb | 10 ++-- .../api/v1/mutes_controller_spec.rb | 20 ------- .../api/v2/mutes_controller_spec.rb | 33 ++++++++++++ 5 files changed, 102 insertions(+), 48 deletions(-) create mode 100644 app/controllers/api/v2/mutes_controller.rb create mode 100644 spec/controllers/api/v2/mutes_controller_spec.rb diff --git a/app/controllers/api/v1/mutes_controller.rb b/app/controllers/api/v1/mutes_controller.rb index 0e64f5d6a..0c43cb943 100644 --- a/app/controllers/api/v1/mutes_controller.rb +++ b/app/controllers/api/v1/mutes_controller.rb @@ -8,15 +8,10 @@ class Api::V1::MutesController < Api::BaseController respond_to :json def index - @data = @accounts = load_accounts + @accounts = load_accounts render json: @accounts, each_serializer: REST::AccountSerializer end - def details - @data = @mutes = load_mutes - render json: @mutes, each_serializer: REST::MuteSerializer - end - private def load_accounts @@ -27,10 +22,6 @@ class Api::V1::MutesController < Api::BaseController Account.includes(:muted_by).references(:muted_by) end - def load_mutes - paginated_mutes.includes(:account, :target_account).to_a - end - def paginated_mutes Mute.where(account: current_account).paginate_by_max_id( limit_param(DEFAULT_ACCOUNTS_LIMIT), @@ -44,31 +35,27 @@ class Api::V1::MutesController < Api::BaseController end def next_path - url_for pagination_params(max_id: pagination_max_id) if records_continue? + if records_continue? + api_v1_mutes_url pagination_params(max_id: pagination_max_id) + end end def prev_path - url_for pagination_params(since_id: pagination_since_id) unless @data.empty? + unless @accounts.empty? + api_v1_mutes_url pagination_params(since_id: pagination_since_id) + end end def pagination_max_id - if params[:action] == 'details' - @mutes.last.id - else - @accounts.last.muted_by_ids.last - end + @accounts.last.muted_by_ids.last end def pagination_since_id - if params[:action] == 'details' - @mutes.first.id - else - @accounts.first.muted_by_ids.first - end + @accounts.first.muted_by_ids.first end def records_continue? - @data.size == limit_param(DEFAULT_ACCOUNTS_LIMIT) + @accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT) end def pagination_params(core_params) diff --git a/app/controllers/api/v2/mutes_controller.rb b/app/controllers/api/v2/mutes_controller.rb new file mode 100644 index 000000000..8ba75c1c2 --- /dev/null +++ b/app/controllers/api/v2/mutes_controller.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +class Api::V2::MutesController < Api::BaseController + before_action -> { doorkeeper_authorize! :follow } + before_action :require_user! + after_action :insert_pagination_headers + + respond_to :json + + def index + @mutes = load_mutes + render json: @mutes, each_serializer: REST::MuteSerializer + end + + def load_mutes + paginated_mutes.includes(:target_account).to_a + end + + def paginated_mutes + Mute.where(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 + url_for pagination_params(max_id: pagination_max_id) if records_continue? + end + + def prev_path + url_for pagination_params(since_id: pagination_since_id) unless @data.empty? + end + + def pagination_max_id + @mutes.last.id + end + + def pagination_since_id + @mutes.first.id + end + + def records_continue? + @mutes.size == limit_param(DEFAULT_ACCOUNTS_LIMIT) + end + + def pagination_params(core_params) + params.permit(:limit).merge(core_params) + end +end diff --git a/config/routes.rb b/config/routes.rb index d95c51135..1646b3034 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -206,11 +206,7 @@ Rails.application.routes.draw do resources :follows, only: [:create] resources :media, only: [:create, :update] resources :blocks, only: [:index] - resources :mutes, only: [:index] do - collection do - get 'details' - end - end + resources :mutes, only: [:index] resources :favourites, only: [:index] resources :reports, only: [:index, :create] @@ -260,6 +256,10 @@ Rails.application.routes.draw do end end + namespace :v2 do + resources :mutes, only: [:index] + end + namespace :web do resource :settings, only: [:update] resource :embed, only: [:create] diff --git a/spec/controllers/api/v1/mutes_controller_spec.rb b/spec/controllers/api/v1/mutes_controller_spec.rb index 7387b9d2d..97d6c2773 100644 --- a/spec/controllers/api/v1/mutes_controller_spec.rb +++ b/spec/controllers/api/v1/mutes_controller_spec.rb @@ -18,24 +18,4 @@ RSpec.describe Api::V1::MutesController, type: :controller do expect(response).to have_http_status(:success) end end - - describe 'GET #details' do - before do - get :details, params: { limit: 1 } - end - - let(:mutes) { JSON.parse(response.body) } - - it 'returns http success' do - expect(response).to have_http_status(:success) - end - - it 'returns one mute' do - expect(mutes.size).to be(1) - end - - it 'returns whether the mute hides notifications' do - expect(mutes.first["hide_notifications"]).to be(false) - end - end end diff --git a/spec/controllers/api/v2/mutes_controller_spec.rb b/spec/controllers/api/v2/mutes_controller_spec.rb new file mode 100644 index 000000000..0e94473a9 --- /dev/null +++ b/spec/controllers/api/v2/mutes_controller_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +RSpec.describe Api::V2::MutesController, type: :controller do + render_views + + let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'follow') } + + before do + Fabricate(:mute, account: user.account, hide_notifications: false) + allow(controller).to receive(:doorkeeper_token) { token } + end + + describe 'GET #index' do + before do + get :index, params: { limit: 1 } + end + + let(:mutes) { JSON.parse(response.body) } + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + + it 'returns one mute' do + expect(mutes.size).to be(1) + end + + it 'returns whether the mute hides notifications' do + expect(mutes.first["hide_notifications"]).to be(false) + end + end +end