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
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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -4,9 +4,9 @@ RSpec.describe Follow, type: :model do
let(:alice) { Fabricate(:account, username: 'alice') }
let(:bob) { Fabricate(:account, username: 'bob') }
describe 'validations' do
subject { Follow.new(account: alice, target_account: bob) }
describe 'validations' do
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