Introduce recent to Follow ()

Introduce recent to Follow, as Account and other models have.
This change also adds specs for the scope and the dependents.
This commit is contained in:
Akihiko Odaki 2017-05-23 20:12:19 +09:00 committed by Eugen Rochko
parent 860ffc0560
commit bf575a1f5e
6 changed files with 41 additions and 6 deletions

View file

@ -4,6 +4,6 @@ class FollowerAccountsController < ApplicationController
include AccountControllerConcern include AccountControllerConcern
def index 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
end end

View file

@ -4,6 +4,6 @@ class FollowingAccountsController < ApplicationController
include AccountControllerConcern include AccountControllerConcern
def index 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
end end

View file

@ -23,4 +23,6 @@ class Follow < ApplicationRecord
has_one :notification, as: :activity, dependent: :destroy has_one :notification, as: :activity, dependent: :destroy
validates :account_id, uniqueness: { scope: :target_account_id } validates :account_id, uniqueness: { scope: :target_account_id }
scope :recent, -> { reorder(id: :desc) }
end end

View file

@ -4,11 +4,21 @@ describe FollowerAccountsController do
render_views render_views
let(:alice) { Fabricate(:account, username: 'alice') } let(:alice) { Fabricate(:account, username: 'alice') }
let(:follower0) { Fabricate(:account) }
let(:follower1) { Fabricate(:account) }
describe 'GET #index' do 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 } 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) expect(response).to have_http_status(:success)
end end
end end

View file

@ -4,11 +4,21 @@ describe FollowingAccountsController do
render_views render_views
let(:alice) { Fabricate(:account, username: 'alice') } let(:alice) { Fabricate(:account, username: 'alice') }
let(:followee0) { Fabricate(:account) }
let(:followee1) { Fabricate(:account) }
describe 'GET #index' do 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 } 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) expect(response).to have_http_status(:success)
end end
end end

View file

@ -4,9 +4,9 @@ RSpec.describe Follow, type: :model do
let(:alice) { Fabricate(:account, username: 'alice') } let(:alice) { Fabricate(:account, username: 'alice') }
let(:bob) { Fabricate(:account, username: 'bob') } let(:bob) { Fabricate(:account, username: 'bob') }
subject { Follow.new(account: alice, target_account: bob) }
describe 'validations' do describe 'validations' do
subject { Follow.new(account: alice, target_account: bob) }
it 'has a valid fabricator' do it 'has a valid fabricator' do
follow = Fabricate.build(:follow) follow = Fabricate.build(:follow)
expect(follow).to be_valid 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) expect(follow).to model_have_error_on_field(:target_account)
end end
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 end