From bf575a1f5e45515733c8c518182bbb0a3c439920 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Tue, 23 May 2017 20:12:19 +0900 Subject: [PATCH] Introduce recent to Follow (#3247) Introduce recent to Follow, as Account and other models have. This change also adds specs for the scope and the dependents. --- app/controllers/follower_accounts_controller.rb | 2 +- .../following_accounts_controller.rb | 2 +- app/models/follow.rb | 2 ++ .../follower_accounts_controller_spec.rb | 12 +++++++++++- .../following_accounts_controller_spec.rb | 12 +++++++++++- spec/models/follow_spec.rb | 17 +++++++++++++++-- 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index d56bd2a4dd..1e7c7c4066 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -4,6 +4,6 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern def index - @follows = Follow.where(target_account: @account).order(id: :desc).page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account) + @follows = Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account) end end diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index 9256478644..f4488eef5e 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -4,6 +4,6 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern def index - @follows = Follow.where(account: @account).order(id: :desc).page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account) + @follows = Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account) end end diff --git a/app/models/follow.rb b/app/models/follow.rb index 863710f5d4..62f6fb670b 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -23,4 +23,6 @@ class Follow < ApplicationRecord has_one :notification, as: :activity, dependent: :destroy validates :account_id, uniqueness: { scope: :target_account_id } + + scope :recent, -> { reorder(id: :desc) } end diff --git a/spec/controllers/follower_accounts_controller_spec.rb b/spec/controllers/follower_accounts_controller_spec.rb index f2082f601f..b9b7fef73e 100644 --- a/spec/controllers/follower_accounts_controller_spec.rb +++ b/spec/controllers/follower_accounts_controller_spec.rb @@ -4,11 +4,21 @@ describe FollowerAccountsController do render_views let(:alice) { Fabricate(:account, username: 'alice') } + let(:follower0) { Fabricate(:account) } + let(:follower1) { Fabricate(:account) } describe 'GET #index' do - it 'returns http success' do + it 'assigns follows' do + follow0 = follower0.follow!(alice) + follow1 = follower1.follow!(alice) + get :index, params: { account_username: alice.username } + assigned = assigns(:follows).to_a + expect(assigned.size).to eq 2 + expect(assigned[0]).to eq follow1 + expect(assigned[1]).to eq follow0 + expect(response).to have_http_status(:success) end end diff --git a/spec/controllers/following_accounts_controller_spec.rb b/spec/controllers/following_accounts_controller_spec.rb index f4a7e88f92..55e7265c76 100644 --- a/spec/controllers/following_accounts_controller_spec.rb +++ b/spec/controllers/following_accounts_controller_spec.rb @@ -4,11 +4,21 @@ describe FollowingAccountsController do render_views let(:alice) { Fabricate(:account, username: 'alice') } + let(:followee0) { Fabricate(:account) } + let(:followee1) { Fabricate(:account) } describe 'GET #index' do - it 'returns http success' do + it 'assigns followees' do + follow0 = alice.follow!(followee0) + follow1 = alice.follow!(followee1) + get :index, params: { account_username: alice.username } + assigned = assigns(:follows).to_a + expect(assigned.size).to eq 2 + expect(assigned[0]).to eq follow1 + expect(assigned[1]).to eq follow0 + expect(response).to have_http_status(:success) end end diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index 0fae253529..43175d8526 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -4,9 +4,9 @@ RSpec.describe Follow, type: :model do let(:alice) { Fabricate(:account, username: 'alice') } let(:bob) { Fabricate(:account, username: 'bob') } - subject { Follow.new(account: alice, target_account: bob) } - describe 'validations' do + subject { Follow.new(account: alice, target_account: bob) } + it 'has a valid fabricator' do follow = Fabricate.build(:follow) expect(follow).to be_valid @@ -24,4 +24,17 @@ RSpec.describe Follow, type: :model do expect(follow).to model_have_error_on_field(:target_account) end end + + describe 'recent' do + it 'sorts so that more recent follows comes earlier' do + follow0 = Follow.create!(account: alice, target_account: bob) + follow1 = Follow.create!(account: bob, target_account: alice) + + a = Follow.recent.to_a + + expect(a.size).to eq 2 + expect(a[0]).to eq follow1 + expect(a[1]).to eq follow0 + end + end end